Search code examples
c++vectordata-structurespure-virtual

"Cannot allocate an object of abstract type" error


Error is here:

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

Grandparent class:

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

Parent class:

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

Actual/child class:

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

I know it's a long shot, I cant write the entire code here…


Solution

  • In C++ a class with at least one pure virtual function is called abstract class. You can not create objects of that class, but may only have pointers or references to it.

    If you are deriving from an abstract class, then make sure you override and define all pure virtual functions for your class.

    From your snippet Your class AliceUniversity seems to be an abstract class. It needs to override and define all the pure virtual functions of the classes Graduate and UniversityGraduate.

    Pure virtual functions are the ones with = 0; at the end of declaration.

    Example: virtual void doSomething() = 0;

    For a specific answer, you will need to post the definition of the class for which you get the error and the classes from which that class is deriving.