Неоднозначное наследование классов

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

person Emanuel Mathias Canova    schedule 09.10.2012    source источник


Ответы (2)


Нет необходимости выводить Tcilindro из Tcirculo, достаточно, если вы выводите его из Trectangulo.

person Asha    schedule 09.10.2012
comment
Да, в этом случае я думаю, вам нужно проверить свой дизайн. - person Pedro Ferreira; 09.10.2012

Эти проблемы из-за множественного наследования с одним и тем же базовым классом. В вашем примере класс Tcilindro наследуется от Trectangulo и Tcirculo, но Trectangulo, уже полученный из Tcirculo и Tcilindro, имеют двойное определение одних и тех же функций. Вам просто нужно опустить здесь класс Tcirculo, чтобы устранить неоднозначность унаследованных функций.

person Denis Ermolin    schedule 09.10.2012