这里为什么会出现[Error] cannot convert 'cube*' to 'square*' in assignment的错误啊
#include
using namespace std;
class shape
{
public:
virtual int area(int n){
return n*n;
}
int edge;
};
class square:public shape
{
public:
square(int n){
edge=n;
}
int area(){
return edge*edge;
}
private:
};
class cube :public shape
{
public:
cube(int n){
edge=n;
}
int area(){
return edge*edge*6;
}
int volume(){
return edge*edge*edge;
}
};
int main(){
shape* s;
square *s1;
int a,b;
cin>>a>>b;
square sq(a);//构造函数
s = &sq;
cout << sq.area() << endl;
cube cu(b);
s1 = &cu; //error出现在这里
cout << cu.area() << endl;
cout << cu.volume();
return 0;
}
该回答引用ChatGPT
请参考下面的解决方案,如果可行 还请点击 采纳,感谢!
这个错误是因为您试图将一个指向一个立方体的指针强制转换为一个指向正方形的指针。两个类的继承关系不能保证从一个类的对象到另一个类的对象的转换。为了解决这个错误,您可以更改指针的数据类型或者使用一个虚函数。
#include <iostream>
using namespace std;
class Shape
{
public:
virtual int area(int n)
{
return n * n;
}
int edge;
};
class Square : public Shape
{
public:
Square(int n)
{
edge = n;
}
int area()
{
return edge * edge;
}
};
class Cube : public Shape
{
public:
Cube(int n)
{
edge = n;
}
int area()
{
return edge * edge * 6;
}
int volume()
{
return edge * edge * edge;
}
};
int main()
{
Square sq(5);
Cube cu(3);
cout << sq.area() << endl;
cout << cu.area() << endl;
cout << cu.volume();
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: