2017-04-20 1 views
-3

나는처럼 보이는 클래스의 구조를 가지고 : 모두 세 개의 순수 가상 함수를 가지고전화 포인터의 벡터에서 기본 클래스 다형성 기능

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

과 1 1 포인터를 보유하는 벡터를,

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

나는 광고 해요 : 8

벡터 클래스를 통해 제어되며,이 기분을 상하게하는 기능을 통해 4 2 3 다음 특정 사람에 기본 값을 반환 할 오버라이드 (override)

list.vectorAdd(&Spaghetti); 

코드를 모두 컴파일,하지만 난 벡터 ::으로 getDescription (인덱스) 또는 벡터 :: getPrice (인덱스)를 호출 할 때마다 나는에 대해 어떠한 정보 디버그 오류를 얻을 :에 의해 INT 주에서 벡터에 땡 뭐가 잘못 됐어.

+2

은''getPrice''에 대한으로 getDescription()', 그리고 저두 수 getDescription' 안 ? – cdhowie

+3

나는 당신의 주장이 당신의 주장과는 반대로 * 컴파일되지 않는다는 것을 보장한다. –

+0

컴파일하고, 그 괄호를 넣는 것을 잊었습니다. –

답변

1

여기서 문제는 vectorAdd 함수 인수가 *Food이 아닌 Food*이어야한다는 것입니다. 사용하는 데 필요한 문제를 찾을 수

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

그건 바보 같았 기 때문에 저를 잘못 입력 한 것뿐입니다. 코드를 복사하여 붙여 넣지 않았습니다. 그것이 그 안에있는 방식으로 편집하지는 않을 것이고, 편집 할 것입니다. –

0

(새 ...) 대신 (& ...)

관련 문제