2012-05-06 15 views
49

¿Por qué el siguiente código produce este error aunque c es una estructura y tiene una herencia pública por defecto?existe la conversión de derivada * a base * pero es inaccesible

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(); 
} 

Respuesta

100

que necesita:

class d : public c 

classprivate herencia es por defecto.

Cuando hereda de manera privada class o struct, explícitamente dice, entre otros, que la conversión directa de un tipo derivado a un tipo base no es posible.

Cuestiones relacionadas