Dado este código:
class Base{
public:
Base();
virtual ~Base();
};
class Derived: protected Base{
public:
virtual ~Derived();
};
En general estoy tratando de asignar derivados a base de esta manera:
Base *pd = new Derived;
¿Por qué esta declaración genera un error?
Aquí nuevo devolverá un puntero del tipo de objeto y siempre podemos asignar un puntero derivado a una base. Corrígeme si estoy equivocado.
Respuestas
9 para la respuesta № 1Para convertir un puntero a una clase a un puntero a un tipo de clase diferente, la conversión debe ser accesible en el punto en que se invoca.
Como Base
es una base protegida de Derived
no se puede inicializar una variable de tipo Base *
de la expresión new Derived
(que tiene tipo Derived *
) fuera de una función miembro de Derived
, una clase derivada de ella o una friend
de Derived
.
0 para la respuesta № 2
Un error de vinculador puede ser el resultado de faltar una implementación para las clases. Le ayudaría si pudiera publicar los mensajes de error en particular.