/ / ¿Por qué Base * pd = nuevo Derivado; generar un error? - C ++, herencia, nuevo operador.

¿Por qué Base * pd = new Derived; generar un error? - c ++, herencia, nuevo operador

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 № 1

Para 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.