2014-11-29 3 views
1

Topic - базовый класс с методом possibleEvaluationQuestions(), объявленным в Topic. AlgebraTopic является подклассом Topic. В AlgebraTopic «CPP файл s Я объявил функцию:C++ унаследованная функция в файле cpp

vector<EvaluationQuestion *> AlgebraTopic::possibleEvaluationQuestions() 
{ 
    return vector<EvaluationQuestion *>(); 
} 

Но получить предупреждение«из-строки определения ..»в Xcode Это говорит. PossibleEvaluationQuestions() 'не объявлен в AlgebraTopic .?, что это не так, но, он объявлен в суперклассе Topic Что я делаю неправильно

+0

Вы должны переопределить его в 'AlgebraTopic' заголовке – quantdev

+0

на самом деле? Несмотря на то, что он объявлен в «Тема»? –

+0

Да, вам нужно новое определение для «AlgebraTopic», поэтому вы должны его обновить – quantdev

ответ

0

при определении:

vector<EvaluationQuestion *> AlgebraTopic::possibleEvaluationQuestions() 

компилятор ищет соответствующее заявление: в C++ вам не может определить член, не объявив его.

Объявление функции базового класса - это объявление другое, другое Функция: оба существуют для любого AlgebraTopic объект.

Вы можете убедить себя в этом:

struct X 
{ 
    virtual void foo() { std::cout << "base\n"; } 
}; 

struct Y : X 
{ 
    void foo() { std::cout << "derived\n"; } 
}; 

int main(){ 

    Y y; 
    y.foo(); 
    y.X::foo(); 
} 

Выход:

полученный

базовый

Смежные вопросы