2011-09-08 75 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

您必須在其中一個父類中聲明一些虛函數,並且從未在任何子類中實現該虛函數。確保所有虛擬函數都在繼承鏈中的某個地方執行。如果一個類的定義包含一個永遠不會實現的純虛函數,那麼這個類的一個實例就不可能被構造。

相關問題