对 Typeinfo 的未定义引用:原因和解决方法
可怕的“对 typeinfo 的未定义引用”错误可能会困扰 C 开发人员,让他们感到困惑它的起源。在幕后,当链接器偶然发现没有相应定义的虚拟函数声明时,就会出现此错误。
虚拟函数设计为在派生类中重写,从而实现多态行为。但是,声明虚拟函数而不定义其定义意味着该定义位于其他地方。这会强制链接器搜索外部编译单元或库以查找丢失的定义。如果链接器无法找到它,则会出现“对 typeinfo 的未定义引用”错误。
考虑此声明:
virtual void fn();
此声明通知编译器 fn() 是一个虚函数但没有提供其实现。链接器会在链接阶段将其标记为未解析的符号,从而导致错误。
要纠正此问题,您必须提供虚函数的定义:
virtual void fn() { /* Implementation here */ }
通过附加声明的定义,链接器不再需要搜索丢失的符号。
此错误类似于以下代码snippet:
extern int i; int *pi = &i;
在这种情况下,i 被声明为位于另一个编译单元中的外部变量。这就需要链接器解析外部引用,但如果找不到i,就会报未解析的符号错误。
通过了解“undefined reference to typeinfo”错误的根本原因,开发者可以及时排查问题并通过为虚拟函数提供正确的定义或适当地处理外部符号引用来解决问题。
以上是为什么我在 C 中收到'未定义的 Typeinfo 引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!