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.
Sollte nicht 'getDescription' sein' getDescription() ', und dito für' getPrice' ? – cdhowie
Ich garantiere Ihnen, dass Ihr Code * nicht * kompiliert, entgegen Ihrer Behauptung. –
Es kompiliert, und ich habe nur vergessen, diese Klammern zu setzen. –