【发布时间】:2014-04-16 19:30:16
【问题描述】:
我已将我的问题归结为一个 *.cpp 文件中的以下代码:
class A {
public:
A() {};
int PerformAction() {
return Action();
}
protected:
virtual int Action();
}
class B: public A {
protected:
int Action();
}
int B::Action() {
return 4;
}
int main() {
B newB;
newB.PerformAction();
};
前面的代码抛出一个Unresolved external symbol error on B::Action()。将a::Action() 的定义更改为:
virtual int Action() = 0;
在主函数中使用它时会产生 Cannot instantiate abstract class 编译器错误。我看到的所有答案都与将代码分布在多个文件中有关,但这都发生在一个源文件中。我想这与B 的Action() 实现超出B 的类定义有关,但看不出它应该导致任何错误的任何原因。
【问题讨论】:
-
这显然不是您正在编译的代码 - 缺少分号并尝试调用受保护的函数会在您报告链接器错误之前给出编译器错误。一旦我修复了这些错误,并按照您的描述使函数成为纯虚拟函数,就没有错误:ideone.com/IS7PJj
-
另外,请不要在发布的代码中添加行号;为了测试它而不得不移除它们是一种痛苦。
-
另外,
main必须返回int。 -
为了了解您收到错误的原因,我们需要演示错误的代码。此代码有不同的错误(缺少分号,
main的类型错误),并在修复这些错误后干净地编译。没有办法知道您的代码可能有什么问题。大概它正在尝试实例化A,但除此之外我无法猜测。 -
因此将其简化为显示相同错误的代码。上面的代码甚至没有表现出你声称的错误。至少,尝试编译/链接/运行您在此处发布的代码,并报告实际代码中的错误,而不是您未向我们展示的其他代码。
标签: c++ inheritance unresolved-external pure-virtual