2012-10-09 10 views
5
#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()':

Tcirculoから Tcilindroを導出する必要はありません
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() 

答えて

2

、あなたからそれを引き出す場合には十分なものですTrectangulo

+0

ええ、この場合は、デザインを確認する必要があると思います。 –

1

これらの問題は、同じ基本クラスで多重継承が原因で発生します。あなたのクラスでは、TcilindroTrectanguloTcirculoから継承していますが、TcirculoTcilindroから既に派生したTrectanguloは同じ機能の二重定義を持っています。継承された関数のあいまいさを取り除くには、Tcirculoクラスをここで省略するだけです。

関連する問題