webentwicklung-frage-antwort-db.com.de

"Ein Objekt des abstrakten Typs kann nicht zugeordnet werden" Fehler

Fehler ist hier:

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

Großelternklasse:

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

Elternklasse:

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

Tatsächliche/Kinderklasse:

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

Ich weiß, es ist ein langer Schuß, ich kann hier nicht den gesamten Code schreiben ...

28
Itzik984

In C++ heißt eine Klasse mit mindestens einer rein virtuellen Funktion abstrakten Klasse . Sie können keine Objekte dieser Klasse erstellen, sondern nur Zeiger oder Verweise darauf.

Wenn Sie von einer abstrakten Klasse abgeleitet sind, müssen Sie sicherstellen, dass Sie alle rein virtuellen Funktionen für Ihre Klasse überschreiben und definieren.

Aus Ihrem Snippet Ihre Klasse AliceUniversity scheint eine abstrakte Klasse zu sein. Es muss alle rein virtuellen Funktionen der Klassen Graduate und UniversityGraduate überschreiben und definieren.

Reine virtuelle Funktionen sind die mit = 0; Am Ende der Deklaration.

Beispiel: virtual void doSomething() = 0;

Für eine bestimmte Antwort müssen Sie die Definition der Klasse, für die Sie den Fehler erhalten, und die Klassen, von denen diese Klasse abgeleitet wird, posten.

76
Alok Save

In einer der übergeordneten Klassen muss eine virtuelle Funktion deklariert und in keiner der untergeordneten Klassen implementiert sein. Stellen Sie sicher, dass alle virtuellen Funktionen irgendwo in der Vererbungskette implementiert sind. Wenn die Definition einer Klasse eine rein virtuelle Funktion enthält, die niemals implementiert wird, kann niemals eine Instanz dieser Klasse erstellt werden.

15
Daniel