我刚刚遇到以下错误(并在网上找到了解决方案,但堆栈溢出中不存在):
(.gnu.linkonce.[stuff]): 未定义引用 [method] [object file]:(.gnu.linkonce.[stuff]): 未定义引用 `typeinfo for [classname]’
为什么会出现这些“未定义的 typeinfo 引用”链接器错误之一?
(如果您能解释幕后发生的事情,则可以加分。)
一个可能的原因是因为您声明了一个虚函数而没有定义它。
当您声明它而不在同一编译单元中定义它时,您表示它是在其他地方定义的 - 这意味着链接器阶段将尝试在其他编译单元(或库)之一中找到它。
定义虚函数的一个例子是:
virtual void fn() { /* insert code here */ }
在这种情况下,您将定义附加到声明中,这意味着链接器以后不需要解析它。
线
virtual void fn();
声明fn()而不定义它,并会导致您询问的错误消息。
fn()
它与代码非常相似:
extern int i; int *pi = &i;
这表明整数i是在另一个编译单元中声明的,必须在链接时解析(否则pi不能设置为它的地址)。
i
pi