व्युत्पन्न * से आधार * में रूपांतरण मौजूद है, लेकिन दुर्गम है


88

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

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

जवाबों:


168

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

class d : public c

classवंशानुक्रम privateडिफ़ॉल्ट रूप से है।

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


श्री ग्रिगोर ने एक बार फिर जीत के लिए। आप दयालु हैं शुक्रिया! आपके जवाब वास्तव में मदद करते हैं!
M.Ionut
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.