Die Konvertierung von abgeleitetem * zu Basis * ist vorhanden, aber nicht möglich

85

Warum erzeugt der folgende Code diesen Fehler, obwohl c eine Struktur ist und standardmäßig eine öffentliche Vererbung hat?

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

Antworten:

165

Du brauchst:

class d : public c

classDie Vererbung erfolgt privatestandardmäßig.

Wenn Sie privat von a classoder a erben struct, sagen Sie unter anderem ausdrücklich, dass eine direkte Konvertierung von einem abgeleiteten Typ in einen Basistyp nicht möglich ist.

Luchian Grigore
quelle
Herr Grigore noch einmal für den Sieg. Ich danke Ihnen lieber Herr! Ihre Antworten helfen wirklich!
M.Ionut