Topic
是基类,具有在possibleEvaluationQuestions()
中声明的称为Topic
的方法。 AlgebraTopic
是Topic
的子类。在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/