因为我以前从未遇到过该错误,所以我该如何解决。您能帮我吗?

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();

}

最佳答案

sphere通过以下两种方式从Solid继承:直接和通过Cylinder间接继承。由于继承是非虚拟的,因此这意味着继承包含两个不同的Solid子对象,从而导致向Solid的转换是不明确的。

在这种情况下,解决方案非常简单:球体不是圆柱体,因此sphere不应继承Cylinder

关于c++ - 实体不是球面的模棱两可的基础,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29228173/

10-11 01:34