Error" No se puede asignar un objeto de tipo abstracto"


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 principal:

UniversityGraduate::UniversityGraduate(char identifier,
                                       long id,
                                       int salary,
                                       double average)
    : Graduate(identifier,id,salary,average)
{
}

Clase actual / 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í {

Author: gustafbstrom, 2011-09-08

2 answers

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 está derivando 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.

Las funciones virtuales puras son las que tienen = 0; al final de la declaración.

Ejemplo: virtual void doSomething() = 0;

Para una respuesta específica, tendrá que publicar la definición de la clase para la que obtiene el error y las clases de las que esa clase se deriva.

 73
Author: Alok Save,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:10

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, una instancia de esa clase nunca se puede construir.

 15
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-08 18:25:49