2017-04-20 5 views
-3

Ich habe eine Struktur von Klassen, die wie folgt aussehen:Aufruf polymorphe Funktion von Vektor des Zeigers auf Basisklasse

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

und ein Vektor, den Zeiger auf 1 1 drei rein virtuelle Funktionen enthält, von denen alle sind außer Kraft gesetzt, um die Standardwerte in 2 und 3 dann spezifisch diejenigen in 4 bis 8

Der Vektor wird gesteuert über eine Klasse und die beide beanstandeten Funktionen zurück:

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

ich bin ad ding zum Vektor von int main von:

list.vectorAdd(&Spaghetti); 

Der Code aller compiliert, aber wenn ich Vector nennen :: getDescription (Index) oder Vector :: getPrice (Index) ich einen Debug-Fehler erhalten, ohne Information, was schief gelaufen ist.

+2

Sollte nicht 'getDescription' sein' getDescription() ', und dito für' getPrice' ? – cdhowie

+3

Ich garantiere Ihnen, dass Ihr Code * nicht * kompiliert, entgegen Ihrer Behauptung. –

+0

Es kompiliert, und ich habe nur vergessen, diese Klammern zu setzen. –

Antwort

1

Das Problem hier ist, dass Ihr vectorAdd Funktionsargument vom Typ Food* statt *Food sein sollte.

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

Das war nur mir, weil ich dumm war, habe meinen Code nicht kopiert und eingefügt. Es würde nicht so kompilieren, wie es ist, wird den Beitrag bearbeiten. –

0

das Problem gefunden, (neu ...) zu verwenden, benötigt statt (& ...)

Verwandte Themen