编译c ++代码时输出奇怪。有任何想法吗?

时间:2012-05-24 19:23:13

标签: c++

当我编译我的代码时,我得到一组与.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

这实际上是我在尝试编译时得到的输出。

3 个答案:

答案 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文件。