我正在使用的C ++程序遇到一些麻烦。我用一个纯虚方法创建了一个抽象类。由于该类没有变量或实现的方法,我将该类存储在没有.cpp实现文件的头文件中(没有任何需要)。
方法是:
virtual void handleEvent() = 0;
问题是当我从该类继承并实现该方法时:
virtual void handleEvent(); (.h file)
void handleEvent(){.....} (.cpp file)
我收到编译错误(使用g ++):
(.rodata._ZtV10Engine[vtable for Engine]+0x8): undefined reference to Engine::handleEvent()
该文件包含在Engine头类中。任何想法为什么这不起作用?
答案 0 :(得分:11)
我认为您忘记将类限定符放在.cpp实现中。它可能应该是:
void Engine::handleEvent() { ... }
答案 1 :(得分:0)
我会说deus-ex-machina399可能是正确的,但它也可能是你的calling conventions(必须在至少2个不同的.cpp文件之间设置不同的编译器设置)。尝试使用__cdecl
或__stdcall
(或者g ++编译器的正确名称,尝试查看this list)