web-dev-qa-db-fra.com

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

Pourquoi le code suivant produit-il cette erreur alors que 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();
}
71
user1232138

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 d'un struct, vous dites explicitement, entre autres, que la conversion directe d'un type dérivé en un type de base n'est pas possible.

141
Luchian Grigore