Подтвердить что ты не робот

Ошибка "Невозможно выделить объект абстрактного типа"

Ошибка здесь:

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

Класс дедушки:

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

Родительский класс:

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

Фактический/дочерний класс:

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

Я знаю, что это длинный выстрел, я не могу написать весь код здесь...

4b9b3361

Ответ 1

В С++ класс с хотя бы одной чистой виртуальной функцией называется абстрактный класс. Вы не можете создавать объекты этого класса, но могут иметь только указатели или ссылки на него.

Если вы являетесь результатом абстрактного класса, убедитесь, что вы переопределите и определите все чистые виртуальные функции для своего класса.

Из вашего фрагмента. Ваш класс AliceUniversity кажется абстрактным классом. Он должен переопределять и определять все чистые виртуальные функции классов Graduate и UniversityGraduate.

Чистые виртуальные функции - это те, у которых = 0; в конце объявления.

Пример: virtual void doSomething() = 0;

Для конкретного ответа вам нужно будет опубликовать определение класса, для которого вы получите ошибку, и классы, из которых происходит этот класс.

Ответ 2

У вас должна быть виртуальная функция, объявленная в одном из родительских классов и никогда не реализованная ни в одном из дочерних классов. Убедитесь, что все виртуальные функции реализованы где-то в цепочке наследования. Если определение класса включает в себя чистую виртуальную функцию, которая никогда не реализуется, экземпляр этого класса не может быть сконструирован.