2012-05-06 13 views
49

Warum erzeugt der folgende Code diesen Fehler, obwohl c eine Struktur ist und eine öffentliche Vererbung standardmäßig hat?Konvertierung von abgeleitet * zu Base * existiert aber ist nicht zugänglich

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

Antwort

100

Sie benötigen:

class d : public c 

class Vererbung ist private standardmäßig. Wenn Sie privat von einem class oder einem struct erben, sagen Sie unter anderem explizit, dass eine direkte Konvertierung von einem abgeleiteten in einen Basistyp nicht möglich ist.

Verwandte Themen