2012-05-06 11 views
49

क्यों फॉलोइंग कोड इस त्रुटि का उत्पादन करता है भले ही सी एक संरचना है और डिफ़ॉल्ट रूप से सार्वजनिक विरासत है ??व्युत्पन्न * से बेस * में रूपांतरण मौजूद है लेकिन पहुंच योग्य नहीं है

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

उत्तर

100

आप की जरूरत है:

class d : public c 

class विरासत private डिफ़ॉल्ट रूप से है।

जब आप निजी तौर पर class या struct से निजी रूप से प्राप्त करते हैं, तो आप स्पष्ट रूप से दूसरों के बीच कहते हैं कि व्युत्पन्न प्रकार से मूल प्रकार में प्रत्यक्ष रूपांतरण संभव नहीं है।

संबंधित मुद्दे