聪明的懒洋洋₽ 2023-04-15 14:20 采纳率: 42.9%
浏览 19
已结题

关于#c++#的问题,如何解决?

我想编辑一个关于点 圆 柱体的三个类,然后我在编译圆的时候定义了一个r半径,但编译器一直说[Error] invalid use of non-static data member 'Circle::r'是因为非静态成员变量的原因吗,哪位大佬帮我这个菜鸟解读一下,还要就是显示函数问题我也没搞懂哭了

img

#include<iostream>
using namespace std;
class Point{
    friend ostream& operator<<(ostream &output,const Point &c){
        cout<<c.x<<","<<c.y<<endl;return output;
    }
    protected:
        int x,y;
    public:
        Point(int n=0,int i=0){setPoint(n,i);}
        setPoint(int p,int q){x=p;y=q;}
};
class Circle:public Point{
    protected:
        int r;
    public:
        Circle(int n,int i,int j):Point(n,i){setCircle(j);}
        setCircle(int j){r=j;}
        int Area()const{return r*r*3.14;}
        friend ostream& operator<<(ostream &output,const Circle &c){
        cout<<"Center:"<<"["<<c.x<<","<<c.y<<"]"<<endl;
        cout<<"The r="<<r<<endl;
        cout<<"area:"<<Area();
        return output;
    }
};
class Cylinder:public Circle{
    protected:
        int h;
    public:
        friend ostream& operator<<(ostream &output,const Cylinder &c){
        cout<<"Center:"<<"["<<c.x<<","<<c.y<<"]"<<endl;
        cout<<"The r="<<r<<endl;
        cout<<"area:"<<Area();
        cout<<"volume:"<<volume();
        return output;
    }
    Cylinder(int i,int j,int k,int e):Circle(i,j,k){setHigh(e);}
    setHigh(int n){h=n;}
    int volume()const{return Area()*h;}
};
int main(){
    Cylinder obj1(1,2,3,4);
    cout<<obj1<<endl;
}

  • 写回答

2条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-04-15 14:29
    关注

    帮你修改如下:

    #include<iostream>
    using namespace std;
    class Point{
        friend ostream& operator<<(ostream &output,const Point &c){
            cout<<c.x<<","<<c.y<<endl;return output;
        }
        protected:
            int x,y;
        public:
            Point(int n=0,int i=0){setPoint(n,i);}
            void setPoint(int p,int q){x=p;y=q;}  // 返回值 void
    };
    class Circle:public Point{
        protected:
            int r;
        public:
            Circle(int n,int i,int j):Point(n,i){setCircle(j);}
            void setCircle(int j){r=j;} // 返回值 void
            int Area()const{return r*r*3.14;}
            friend ostream& operator<<(ostream &output,const Circle &c){
                cout<<"Center:"<<"["<<c.x<<","<<c.y<<"]"<<endl;
                cout<<"The r="<<c.r<<endl; // 修改
                cout<<"area:"<<c.Area(); // 修改
                return output;
            }
    };
    class Cylinder:public Circle{
        protected:
            int h;
        public:
            friend ostream& operator<<(ostream &output,const Cylinder &c){
                cout<<"Center:"<<"["<<c.x<<","<<c.y<<"]"<<endl;
                cout<<"The r="<<c.r<<endl; // 修改
                cout<<"area:"<<c.Area(); // 修改
                cout<<"volume:"<<c.volume(); // 修改
                return output;
            }
            Cylinder(int i,int j,int k,int e):Circle(i,j,k){setHigh(e);}
            void setHigh(int n){h=n;} // 返回值 void
            int volume()const{return Area()*h;}
    };
    int main(){
        Cylinder obj1(1,2,3,4);
        cout<<obj1<<endl;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月15日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境