#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()
答案 0 :(得分:2)
无需从Tcilindro
派生Tcirculo
,只需从Trectangulo
派生即可。
答案 1 :(得分:1)
由于具有相同基类的多重继承,这些问题。在您的示例中,类Tcilindro
继承自Trectangulo
和Tcirculo
但Trectangulo
已派生自Tcirculo
和Tcilindro
具有相同功能的双重定义。你只需要在这里省略Tcirculo
类来消除继承函数的歧义。