"Impossible d'allouer un objet de type abstrait" erreur

L'erreur est ici:

vector<Graduate *> graduates;
graduates.push_back(new AliceUniversity(identifier,id,salary,average));

Classe des grands-parents:

Graduate::Graduate(char identifier,
                   long id,
                   int salary,
                   double average)
    : _identifier(identifier),
      _id(id),_salary(salary),
      _average(average)
{
}

Classe parente:

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

Classe réelle / enfant:

AliceUniversity::AliceUniversity(char identifier,
                                 long id,
                                 int salary,
                                 double average)
    : UniversityGraduate(identifier,id,salary,average)
{
    _graduateNum++;
    _sumOfGrades += average;
    _avrA = getAverage();
}

Je sais que c'est un long shot, Je ne peux pas écrire le code entier ici ...

27
demandé sur gustafbstrom 2011-09-08 22:23:30

2 réponses

En C++ , une classe avec au moins une fonction virtuelle pure est appelée classe abstraite. Vous ne pouvez pas créer d'objets de cette classe, mais vous ne pouvez y avoir que des pointeurs ou des références.

Si vous dérivez d'une classe abstraite, assurez-vous de remplacer et de définir toutes les fonctions virtuelles pures pour votre classe.

De votre extrait de code, votre classe AliceUniversity semble être une classe abstraite. Il doit remplacer et définir toutes les fonctions virtuelles pures des classes Graduate et UniversityGraduate.

Les fonctions virtuelles pures sont celles avec = 0; à la fin de la déclaration.

Exemple: virtual void doSomething() = 0;

Pour une réponse spécifique, vous devrez publier la définition de la classe pour laquelle vous obtenez l'erreur et les classes à partir desquelles cette classe est dérivée.

73
répondu Alok Save 2017-05-23 12:26:10

Vous devez avoir une fonction virtuelle déclarée dans l'une des classes parentes et jamais implémentée dans l'une des classes enfants. Assurez-vous que toutes les fonctions virtuelles sont implémentées quelque part dans la chaîne d'héritage. Si la définition d'une classe inclut une fonction virtuelle pure qui n'est jamais implémentée, une instance de cette classe ne peut jamais être construite.

15
répondu Daniel 2011-09-08 18:25:49