2012-05-06 8 views
49

Dlaczego następujący kod generuje ten błąd, mimo że c jest strukturą i domyślnie ma dziedziczenie publiczne?Konwersja z wyprowadzonego * na bazę * istnieje, ale jest niedostępna.

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

Odpowiedz

100

potrzebował:

class d : public c 

class dziedziczenie jest private domyślnie.

Kiedy prywatnie dziedziczysz po class lub struct, wyraźnie mówisz między innymi, że bezpośrednia konwersja z typu pochodnego na typ podstawowy nie jest możliwa.

Powiązane problemy