È possibile eliminare error C2243?Eliminazione dell'errore C2243
class B {};
class D : protected B {};
D d;
B *p = &d; // conversion from 'D *' to 'B &' exists, but is inaccessible
Ho avuto questo errore nel mio app e alla fine sono riuscito a compilarlo facendo una conversione esplicita:
D d;
B *p = (B*)&d;
non riesco a capire il motivo per cui facendo classe D ereditato protetta da B rende inaccessibile la conversione implicita.
ho cercato di evitare la conversione esplicita con la creazione di un operatore di B() in classe D al fine di rendere la conversione accessibili:
class B {};
class D : protected B
{
public:
operator B() {return *this;}
};
Ma non c'è modo.
Qualsiasi altra soluzione per evitare la conversione esplicita?
Che dire di dare accesso solo al interfaccia const della classe base? Quindi ereditare privatamente e permettere di trasmettere a const base e? Chiedere perché non riesce a farlo funzionare su MSVC ... –
Basta rispondere a me stesso, è necessario gestire la classe per aggregazione non ereditarietà, altrimenti MSVC viene confuso e tenta di risolvere la conversione per eredità privata (operatore nascosto operatore) –