it-swarm.it

Errore "Impossibile allocare un oggetto di tipo astratto"

L'errore è qui:

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

Classe dei nonni:

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

Classe genitore:

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

Classe reale/figlio:

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

So che è un colpo lungo, non posso scrivere l'intero codice qui ...

28
Itzik984

In C++ una classe con almeno una funzione virtuale pura è chiamata classe astratta . Non puoi creare oggetti di quella classe, ma puoi avere solo puntatori o riferimenti ad essa.

Se stai derivando da una classe astratta, assicurati di sovrascrivere e definire tutte le funzioni virtuali pure per la tua classe.

Dal tuo frammento La tua classe AliceUniversity sembra essere una classe astratta. Deve sovrascrivere e definire tutte le funzioni virtuali pure delle classi Graduate e UniversityGraduate.

Le funzioni virtuali pure sono quelle con = 0; Alla fine della dichiarazione.

Esempio: virtual void doSomething() = 0;

Per una risposta specifica, sarà necessario pubblicare la definizione della classe per cui si ottiene l'errore e le classi da cui deriva quella classe.

76
Alok Save

Devi avere una funzione virtuale dichiarata in una delle classi principali e mai implementata in nessuna delle classi secondarie. Assicurarsi che tutte le funzioni virtuali siano implementate da qualche parte nella catena dell'ereditarietà. Se la definizione di una classe include una pura funzione virtuale che non viene mai implementata, un'istanza di quella classe non potrà mai essere costruita.

15
Daniel