小编典典

g ++未定义对typeinfo的引用

all

我刚刚遇到以下错误(并在网上找到了解决方案,但堆栈溢出中不存在):

(.gnu.linkonce.[stuff]): 未定义引用 [method] [object
file]:(.gnu.linkonce.[stuff]): 未定义引用 `typeinfo for [classname]’

为什么会出现这些“未定义的 typeinfo 引用”链接器错误之一?

(如果您能解释幕后发生的事情,则可以加分。)


阅读 168

收藏
2022-05-19

共1个答案

小编典典

一个可能的原因是因为您声明了一个虚函数而没有定义它。

当您声明它而不在同一编译单元中定义它时,您表示它是在其他地方定义的 - 这意味着链接器阶段将尝试在其他编译单元(或库)之一中找到它。

定义虚函数的一个例子是:

virtual void fn() { /* insert code here */ }

在这种情况下,您将定义附加到声明中,这意味着链接器以后不需要解析它。

线

virtual void fn();

声明fn()而不定义它,并会导致您询问的错误消息。

它与代码非常相似:

extern int i;
int *pi = &i;

这表明整数i是在另一个编译单元中声明的,必须在链接时解析(否则pi不能设置为它的地址)。

2022-05-19