我刚刚遇到了以下错误(我在网上找到了解决方案,但它不存在于Stack Overflow中):
(.gnu.linkonce.stuff):未定义对方法的引用:(.gnu.linkonce.stuff):未定义对` `typeinfo for classname‘的引用
为什么会出现这样的“对typeinfo的引用未定义”的链接器错误?
(如果你能解释幕后发生的事情,你会得到加分。)
发布于 2008-11-21 00:42:20
一个可能的原因是您在没有定义的情况下声明了一个虚函数。
如果您在没有在同一编译单元中定义它的情况下声明它,则表示它是在其他地方定义的-这意味着链接器阶段将尝试在其他编译单元(或库)中查找它。
定义虚拟函数的一个示例是:
virtual void fn() { /* insert code here */ }
在本例中,您将一个定义附加到声明,这意味着链接器不需要在以后解析它。
这条线
virtual void fn();
在未定义的情况下声明fn()
,并将导致您询问的错误消息。
它与代码非常相似:
extern int i;
int *pi = &i;
这说明整数i
是在另一个编译单元中声明的,该单元必须在链接时解析(否则pi
不能设置为它的地址)。
发布于 2010-11-15 21:37:04
当您混合使用-fno-rtti
和-frtti
代码时,也会发生这种情况。然后,您需要确保任何在-frtti
代码中访问的type_info
类都使用-frtti
编译了它们的关键方法。当你创建一个类的对象,使用dynamic_cast
等,就会发生这样的访问。
[source]
发布于 2008-11-21 00:17:05
当声明的(非纯)虚函数缺少主体时,就会发生这种情况。在您的类定义中,类似于:
virtual void foo();
应定义(内联或在链接的源文件中):
virtual void foo() {}
或者声明为纯虚拟的:
virtual void foo() = 0;
https://stackoverflow.com/questions/307352
复制相似问题