2011-09-08 41 views
24

错误是在这里:“无法分配抽象类型的对象” 错误

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

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

+0

这不会做 - 发布实际代码,并在特定的地方声明纯虚函数(查找'= 0;')。 –

+0

构造函数是完全不相关的,你应该发布声明 – lurscher

回答

70

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

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

从你的片段你的类AliceUniversity似乎是一个抽象类。它需要覆盖并定义类GraduateUniversityGraduate的所有纯虚函数。

纯虚函数是声明结束时的= 0;

例子:virtual void doSomething() = 0;

对于一个明确的答案,你将需要发布的类定义,你得到的错误,并从那个类派生的类。

+0

//你不能创建该类的对象,但可能只有指针或引用它//是否正确? – Naveen

+0

@Naveen:这是正确的。 –

15

您必须在其中一个父类中声明一些虚函数,并且从未在任何子类中实现该虚函数。确保所有虚拟函数都在继承链中的某个地方执行。如果一个类的定义包含一个永远不会实现的纯虚函数,那么这个类的一个实例就不可能被构造。

相关问题