c++ - Error "No se puede asignar un objeto de tipo abstracto"
vector data-structures (2)
El error está aquí:
vector<Graduate *> graduates;
graduates.push_back(new AliceUniversity(identifier,id,salary,average));
Clase de abuelos:
Graduate::Graduate(char identifier,
long id,
int salary,
double average)
: _identifier(identifier),
_id(id),_salary(salary),
_average(average)
{
}
Clase de padres:
UniversityGraduate::UniversityGraduate(char identifier,
long id,
int salary,
double average)
: Graduate(identifier,id,salary,average)
{
}
Clase real / infantil:
AliceUniversity::AliceUniversity(char identifier,
long id,
int salary,
double average)
: UniversityGraduate(identifier,id,salary,average)
{
_graduateNum++;
_sumOfGrades += average;
_avrA = getAverage();
}
Sé que es una posibilidad remota, no puedo escribir todo el código aquí ...
Debe tener alguna función virtual declarada en una de las clases principales y nunca implementada en ninguna de las clases secundarias. Asegúrese de que todas las funciones virtuales estén implementadas en algún lugar de la cadena de herencia. Si la definición de una clase incluye una función virtual pura que nunca se implementa, nunca se podrá construir una instancia de esa clase.
En C ++ una clase con al menos una función virtual pura se llama clase abstracta . No puede crear objetos de esa clase, pero solo puede tener punteros o referencias a ella.
Si deriva de una clase abstracta, asegúrese de anular y definir todas las funciones virtuales puras para su clase.
De tu fragmento Tu clase AliceUniversity
parece ser una clase abstracta. Necesita anular y definir todas las funciones virtuales puras de las clases Graduate
y UniversityGraduate
Graduate
.
Las funciones virtuales puras son aquellas con = 0;
al final de la declaración.
Ejemplo: virtual void doSomething() = 0;
Para una respuesta específica, deberá publicar la definición de la clase para la que obtiene el error y las clases de las que se deriva esa clase.