Topic是基类,具有在possibleEvaluationQuestions()中声明的称为Topic的方法。 AlgebraTopicTopic的子类。在AlgebraTopic的cpp文件中,我声明了该函数:

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


但是在Xcode中得到警告“行外定义...”。它说在AlgebraTopic中没有声明'possibleEvaluationQuestions()',它不是在超类Topic中声明的。 。 我究竟做错了什么?

最佳答案

当您定义时:

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


输出:


  派生的
  
  基础

关于c++ - cpp文件中的C++继承函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27208387/

10-13 08:34
查看更多