【问题标题】:Ambiguous class inheritance模棱两可的类继承
【发布时间】:2012-09-29 09:47:08
【问题描述】:
#include <iostream>
#include <cmath>
using namespace std;
class Tcirculo{
        float radio;
        float diametro;
        float area;
public:
        void carea(float r){radio= r; area=(M_PI*((r*r)));}
        float cdiam(float r) {diametro = 2*r; return diametro;}
        float getr(){return radio;}
        float getd(){return diametro;}
        float geta(){return area;}

};


class Trectangulo : public Tcirculo{
        float altura;
public:
        float calca(float h, float r){altura =h;
        float arearec = getd() * h; return arearec;}
};

class Tcilindro :  public Tcirculo ,Trectangulo{
        float xx,bb;
public:
        Tcilindro(float a, float b) {xx=a;bb=b;}
        float area_total();
};

float Tcilindro::area_total(){
        int area;
        area = ((2*((getd())))+calca(bb,xx));
        return area;
}
int main(int argc, char *argv[]) {

        return 0;
}

但问题是:

warning: direct base 'Tcirculo' inaccessible in 'Tcilindro' due to ambiguity

在成员函数'float Tcilindro::area_total()':

error: reference to 'geta' is ambiguous
error: candidates are: float Tcirculo::geta()
error:                 float Tcirculo::geta()
error: reference to 'geta' is ambiguous
error: candidates are: float Tcirculo::geta()
error:                 float Tcirculo::geta()

【问题讨论】:

    标签: c++ class inheritance multiple-inheritance ambiguous


    【解决方案1】:

    Tcilindro不需要从Tcirculo派生,只要从Trectangulo派生就足够了。

    【讨论】:

    • 是的,在这种情况下,我认为您需要检查您的设计。
    【解决方案2】:

    这些问题是因为具有相同基类的多重继承。在您的示例类 Tcilindro 继承自 TrectanguloTcirculoTrectangulo 已经派生自 TcirculoTcilindro 具有相同功能的双重定义。您只需在此处省略 Tcirculo 类即可消除继承函数的歧义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多