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


88

Pourquoi le code suivant produit-il cette erreur même si c est une structure 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();
}

Réponses:


168

Vous avez besoin:

class d : public c

classl'héritage est privatepar défaut.

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


M. Grigore une fois de plus pour la victoire. Merci Monsieur! Vos réponses aident vraiment!
M.Ionut
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.