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

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.


Herr Grigore noch einmal für den Sieg. Ich danke Ihnen lieber Herr! Ihre Antworten helfen wirklich!
M.Ionut
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.