¿Es posible deshacerse de error C2243?Deshacerse del error C2243
class B {};
class D : protected B {};
D d;
B *p = &d; // conversion from 'D *' to 'B &' exists, but is inaccessible
tuve este error en mi aplicación y al final he logrado compilar al hacer una conversión explícita:
D d;
B *p = (B*)&d;
no puedo entender por qué al hacer la clase D heredado protegida desde B hace que la conversión implícita sea inaccesible.
Me trataron de evitar la conversión explícita mediante la creación de un operador B() en la clase D con el fin de hacer la conversión accesible:
class B {};
class D : protected B
{
public:
operator B() {return *this;}
};
pero no hay manera.
¿Alguna otra solución para evitar la conversión explícita?
¿Qué hay de dar acceso sólo a la const interfaz de la clase base? Entonces, ¿heredas privadamente y permites lanzar a const base &? Preguntar porque no puede hacer que funcione en MSVC ... –
Solo respondiendo a mí mismo, necesita manejar la clase por agregación, no herencia, de lo contrario, MSVC se confunde e intenta resolver la conversión por herencia privada (ocultando el operador de conversión) –