我想编辑一个关于点 圆 柱体的三个类,然后我在编译圆的时候定义了一个r半径,但编译器一直说[Error] invalid use of non-static data member 'Circle::r'是因为非静态成员变量的原因吗,哪位大佬帮我这个菜鸟解读一下,还要就是显示函数问题我也没搞懂哭了
#include
using namespace std;
class Point{
friend ostream& operator<<(ostream &output,const Point &c){
cout<","<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:"<<"["<","<"]"<"The r="<"area:"<<Area();
return output;
}
};
class Cylinder:public Circle{
protected:
int h;
public:
friend ostream& operator<<(ostream &output,const Cylinder &c){
cout<<"Center:"<<"["<","<"]"<"The r="<"area:"<<Area();
cout<<"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<
帮你修改如下:
#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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:是的,您的猜测是正确的。编译器提示 "invalid use of non-static data member" 的原因是您在定义圆类时没有把半径参数声明成静态成员变量,导致在使用时产生了错误。具体来说,静态成员变量在类中只会有一个实例,而非静态成员变量在每个类实例中都会有一个实例,如果您想要访问非静态成员变量,请使用类实例作为调用者。因此,推荐您进行如下操作:
class Circle {
private:
static double r; // 将半径参数声明为静态成员变量
// ... other member variables and functions
};
double Circle::r = 0.0; // 静态成员变量需要在类外面进行初始化
// 接下来你可以在你的代码中使用r,比如:
Circle::r = 1.0;
通过这样的方式,您可以在不需要创建类实例的情况下访问半径这个成员变量。
对于您提到的显示函数的问题,我们需要更多的具体信息才能帮助您解决问题。请提供更多的信息或提交一个新的问题,以便我们可以更好地帮助您解决问题。