不明确的类继承
Ambiguous class inheritance
#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()
没有必要从Tcirculo
派生Tcilindro
,如果你从Trectangulo
派生就足够了。
这些问题是由于与相同的基类的多重继承。在您的示例中,类 Tcilindro
继承自 Trectangulo
和 Tcirculo
,但Trectangulo
已经从 Tcirculo
派生,并且Tcilindro
具有相同函数的双重定义。您只需要在此处省略Tcirculo
类即可消除继承函数的歧义。
相关文章:
- Visual C++(VS2017)中用户定义的转换不明确
- 重载类方法的不明确调用
- 为函数定义符号不明确的指针参数
- C++ 不明确访问 - 虚拟继承
- 多重继承和访问不明确的元素
- 如何解决多次继承的不明确变量名称?
- 继承会导致不明确的转换
- 如果存在具有不同参数的继承成员,为什么对 C++ 结构函数的调用不明确?
- C++多个继承私有成员不明确访问
- 为什么常量/非常量函数重载的继承不明确
- 从具有运算符重载的模板化类继承。'operator*'的不明确重载
- c++ 不明确的双非虚函数继承
- 不明确的类继承
- 对继承的模板方法的不明确调用
- 基于策略的设计中的不明确继承
- C++ 继承错误:不明确的错误
- 继承类 c++ 中的不明确错误
- 为什么重载的继承静态函数不明确
- 当使用多重继承时,为什么这个限定名称不明确
- 为什么多重继承具有不同签名的方法是不明确的