聪明的懒洋洋₽ 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日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加