当我编译我的代码时,我得到一组与.o文件中的输出文件相关的错误。我不确定为什么会出现这种错误。任何想法?
/tmp/ccjPLJVV.o: In function `PubSub::~PubSub()':
Video_process.cpp:(.text._ZN6PubSubD2Ev[_ZN6PubSubD5Ev]+0x12): undefined reference to `vtable for PubSub'
/tmp/ccjPLJVV.o: In function `main':
Video_process.cpp:(.text.startup+0x34): undefined reference to `vtable for PubSub'
Video_process.cpp:(.text.startup+0xeb): undefined reference to `PubSub::run()'
/tmp/ccjPLJVV.o:(.rodata._ZTI13Video_process[typeinfo for Video_process]+0x10): undefined reference to `typeinfo for PubSub'
collect2: ld returned 1 exit status
这实际上是我在尝试编译时得到的输出。
答案 0 :(得分:1)
您似乎没有实现virtual
方法。
class PubSub
{
//virtual destructors, although pure
//MUST have an implementation
virtual ~PubSub() = 0 { }
/*virtual?*/ void Run(); // <--- have you implemented this one?
};
答案 1 :(得分:0)
这是来自链接器的错误消息,而不是编译器。链接器找不到某些已声明但未定义的符号,在某些文件中,它尝试链接在一起以生成(很可能)可执行文件。解决方案是提供定义,即(编译的)代码与这些定义。该代码可能已经存在,您只需要“链接它”(告诉链接器在那里搜索符号)或者可能不会,在这种情况下您必须提供它...
例如,将定义类PubSub
的实现的文件添加到链接器/编译器命令行应该有帮助......
答案 2 :(得分:0)
也许你已经实现了这个方法,但是你没有将它链接起来。如果您正在使用GCC, -o 标志是您的朋友;编译main.cpp时必须指定所有类.o文件。