konversi dari turunan * ke basis * ada tetapi tidak dapat diakses

88

Mengapa kode follwing menghasilkan kesalahan ini meskipun c adalah sebuah struct dan memiliki warisan publik secara default ??

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

Jawaban:

168

Anda membutuhkan:

class d : public c

classwarisan secara privatedefault.

Ketika Anda secara pribadi mewarisi dari a classatau a struct, Anda secara eksplisit mengatakan, antara lain, bahwa konversi langsung dari tipe turunan ke tipe dasar tidak dimungkinkan.

Luchian Grigore
sumber
Tuan Grigore sekali lagi untuk menang. Terima kasih, tuan yang baik! Jawaban Anda sangat membantu!
M.Ionut