有时候,我正在处理相对复杂的(有时令人困惑的 - 用它们最初编写它的人的方式)抽象类。从它继承时,我有时会遇到cannot instantiate abstract class
,而且大部分时间都是因为我忘了宣布&实现纯虚函数。我可以从编译器获得更多关于它发现我没有实现的功能而不是寻找它的信息吗?
答案 0 :(得分:4)
您使用的是Visual Studio吗?如果是,则从“错误列表”选项卡切换到“输出”选项卡。会有类似的东西:
main.cpp(8): error C2259: 'foo' : cannot instantiate abstract class
due to following members:
'void Foo::method(char)' : is abstract
答案 1 :(得分:2)
每当遇到该消息时,它立即意味着您尚未在派生类中定义纯 virtual
函数,并且您想要创建它的实例。如果你正在使用一个好的编译器,我确定,它表明你没有实现哪个纯 virtual
函数。至少,海湾合作委员会表示。
请在此处查看错误消息:http://www.ideone.com/83iDk
prog.cpp:在函数'int main()'中:
prog.cpp:11:错误:不能将变量'a'声明为抽象类型'A' prog.cpp:6:注意:因为以下虚函数在'A'中是纯的:
prog.cpp:7:注意:虚拟空虚A :: f()
绰绰有余,你没有实现A::f()
。