我如何修复此错误,因为我之前从未遇到过这个错误。你可以帮助我吗?
class Solid
{
public:
virtual void input()=0;
virtual void output()=0;
virtual float area()=0;
};
class Cylinder:public Solid
{
protected:
float r,h;
public:
void input()
{
cout<<"Radius:";cin>>r;
cout<<"Height:";cin>>h;
}
float area()
{
return (2*3.14*r*r)+(h*(2*3.14*r));
}
void output()
{
cout<<r<<"\t"<<h<<"\t"<<area()<<endl;
}
};
class sphere:public Solid,public Cylinder
{
public:
void output()
{
cout<<r<<"\t"<<area();
}
float area()
{
return 2*3.14*r*r;
}
};
int main()
{
Solid *a;
Cylinder c;
a=&c;
a->input();
a->output();
sphere h;
a=&h;
a->input();
a->output();
}
答案 0 :(得分:2)
sphere
以两种方式从Solid
继承:直接,间接通过Cylinder
。由于继承是非虚拟的,这意味着它包含两个不同的Solid
子对象,使转换为Solid
不明确。
在这种情况下,解决方案非常简单:球体不是柱面,因此sphere
不应继承Cylinder
。