g ++ undefined对typeinfo的引用我只是遇到了以下错误(并在线找到了解决方案,但它在Stack Overflow中不存在):(.gnu.linkonce。[stuff]):对[方法] [目标文件]的未定义引用:(。gnu.linkonce。[stuff]):对[classname]的`typeinfo的未定义引用为什么可能会得到这些“未定义的typeinfo引用”链接器错误之一?(如果你能解释幕后发生的事情,可以给予奖励。)
3 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
一个可能的原因是因为您在没有定义虚拟函数的情况下声明它。
如果在没有在同一编译单元中定义它的情况下声明它,则表明它已在其他位置定义 - 这意味着链接器阶段将尝试在其他编译单元(或库)中找到它。
定义虚函数的一个示例是:
virtual void fn() { /* insert code here */ }
在这种情况下,您将一个定义附加到声明,这意味着链接器以后不需要解析它。
这条线
virtual void fn();
声明fn()
而不定义它,并将导致您询问的错误消息。
它与代码非常相似:
extern int i;int *pi = &i;
表明整数i
是在另一个编译单元中声明的,必须在链接时解析(否则pi
不能设置为它的地址)。
FFIVE
TA贡献1797条经验 获得超6个赞
混合-fno-rtti
和-frtti
编码时也会发生这种情况。然后,您需要确保type_info
在-frtti
代码中访问的任何类都使用其密钥方法进行编译-frtti
。当您创建类的对象,使用dynamic_cast
等时,可能会发生此类访问。
白衣染霜花
TA贡献1796条经验 获得超10个赞
当声明的(非纯)虚函数缺少实体时会发生这种情况。在您的类定义中,类似于:
virtual void foo();
应该定义(内联或链接的源文件):
virtual void foo() {}
或者声明纯虚拟:
virtual void foo() = 0;
- 3 回答
- 0 关注
- 467 浏览
添加回答
举报
0/150
提交
取消