2012-05-06 26 views
49

Neden bir yapılandırma yapısı ve varsayılan olarak genel bir mirasa sahip olsa da, hata kodu bu hataya neden neden oluyor?türetilmiş * ile taban * arasında dönüşüm var, ancak erişilemiyor.

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

cevap

100

Sen gerekir:

class d : public c 

class miras varsayılan olarak private olduğunu.

class veya struct'dan özel olarak miras aldığınızda, diğerlerinin yanı sıra türetilmiş türden bir taban türüne doğrudan dönüşümün mümkün olmadığını açıkça söylüyorsunuz.

İlgili konular