la conversione da derivato * a base * esiste ma è inaccessibile


88

Perché il codice seguente produce questo errore anche se c è una struttura e ha un'eredità pubblica per impostazione predefinita ??

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

Risposte:


168

Hai bisogno:

class d : public c

classl'ereditarietà è privatepredefinita.

Quando erediti privatamente da a classo a struct, dici esplicitamente, tra le altre cose, che la conversione diretta da un tipo derivato a un tipo di base non è possibile.


Mr Grigore ancora una volta per la vittoria. Grazie gentile signore! Le tue risposte aiutano davvero!
M. Ionut
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.