0

当我编译我的代码时,我得到一组错误,这些错误似乎与 .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

这本质上是我尝试编译时得到的输出。

4

3 回答 3

1

看来您有未实现的virtual方法。

class PubSub
{
    //virtual destructors, although pure
    //MUST have an implementation
    virtual ~PubSub() = 0 { } 

    /*virtual?*/ void Run(); // <--- have you implemented this one?
}; 
于 2012-05-24T19:24:30.307 回答
0

这是来自链接器的错误消息,而不是编译器。链接器在某些文件中找不到一些已声明但未定义的符号,它试图链接在一起以生成(很可能)可执行文件。解决方案是提供定义,即带有这些定义的(编译的)代码。该代码可能已经存在,您只需要“链接它”(告诉链接器在那里搜索符号)或可能不存在,在这种情况下您必须提供它......

例如,将定义类实现的文件添加PubSub到链接器/编译器命令行应该有助于...

于 2012-05-24T19:51:16.570 回答
0

也许你已经实现了这个方法,但你还没有链接它。如果你使用 GCC,-o标志是你的朋友;编译 main.cpp 时必须指定所有类 .o 文件。

于 2012-05-24T20:28:01.400 回答