93 votes

la conversion de dérivé * en base * existe mais est inaccessible

Pourquoi le code suivant produit-il cette erreur alors que c est un struct et a un héritage public par défaut ?

struct c 
{
protected:
    int i;
public:
    c(int ii=0):i(ii){}
    virtual c *fun();
};

c* c::fun(){
    cout<<"in c";
    return &c();
}

class d : c
{
 public:
    d(){}
    d* fun()
    {
        i = 9;
        cout<<"in d"<<'\t'<<i;
        return &d();
    }
};

int main()
{
    c *cc;
    d dd;
    cc = &dd;
    cc->fun();
}

178voto

Luchian Grigore Points 136646

Vous avez besoin :

class d : public c

class l'héritage est private par défaut.

Lorsque vous héritez en privé d'un class ou un struct vous dites explicitement, entre autres choses, que la conversion directe d'un type dérivé en un type de base n'est pas possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X