2017-04-20 39 views
-3

我的類看起來像一個結構:呼叫多態函數從指針的矢量到基類

 1 
    /\ 
    2 3 
    ||| || 
    4 5 6 7 8 

和保持指針1 1的矢量具有三個純虛函數,所有這些都是重寫通過8.

載體是通過一類控制和兩個違規功能在4 2點3然後特定的人返回默認值:

class Vector 
{ 

public: 
    Vector(); 

    void vectorAdd(Food* food) 
    { 
     mList.push_back(food); 
    } 


    //The two offending functions. The functions they point to are pure 
    //virtual in the Food class and overridden in the derived classes. 

    string getDescription(size_t index) 
    { 
     return mList[index]->getDescription(); 
    } 


    double getPrice(size_t index) 
    { 
     return mList[index]->getPrice(); 
    } 
private: 
    vector<Food*> mList; 
}; 

我的廣告叮叮由INT主要載體:

list.vectorAdd(&Spaghetti); 

代碼編譯所有,但每當我打電話矢量:: getDescription(指數)或Vector ::用getPrice(指數)我得到一個調試錯誤,沒有信息來什麼地方出了錯。

+2

不應該'getDescription'是'getDescription()',並同上,用於'getPrice' ? – cdhowie

+3

我保證你的代碼不會*編譯,與你的斷言相反。 –

+0

它編譯,我忘了把這些括號。 –

回答

1

這裏的問題是您的vectorAdd函數參數應該是Food*而不是*Food

void vectorAdd(Food* pFood) 
{ 
    mList.push_back(pFood); 
} 
+0

這只是我朦朧,因爲我愚蠢沒有複製和粘貼我的代碼。它不會以這種方式進行編譯,將編輯帖子。 –

0

發現問題,要使用需要(新...),而不是(& ......)