“无法分配抽象类型的对象”错误

时间:2011-09-08 18:23:31

标签: c++ vector data-structures pure-virtual

错误在这里:

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();
}

我知道这是一个很长的镜头,我不能在这里写完整个代码......

2 个答案:

答案 0 :(得分:74)

在C ++中,至少有一个pure virtual function的类称为抽象类。您不能创建该类的对象,但可能只有指针或对它的引用。

如果您是从抽象类派生的,那么请确保覆盖并定义类的所有纯虚函数。

从您的代码段中,您的班级AliceUniversity似乎是一个抽象类。它需要覆盖和定义类GraduateUniversityGraduate的所有纯虚函数。

纯虚函数是声明结尾处= 0;的函数。

示例:virtual void doSomething() = 0;

对于特定答案,您需要发布您获得错误的类的定义以及该类派生的类。

答案 1 :(得分:15)

您必须在其中一个父类中声明一些虚函数,并且永远不会在任何子类中实现。确保所有虚拟函数都在继承链中的某个位置实现。如果类的定义包含从未实现的纯虚函数,则无法构造该类的实例。