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

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.


Tuan Grigore sekali lagi untuk menang. Terima kasih, tuan yang baik! Jawaban Anda sangat membantu!
M.Ionut
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.