web-dev-qa-db-fra.com

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

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

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 long, je ne peux pas écrire le code entier ici…

28
Itzik984

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 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 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 dont dérive cette classe.

76
Alok Save

Vous devez avoir une fonction virtuelle déclarée dans l'une des classes parentes et jamais implémentée dans aucune 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
Daniel