G : 了解“未定义的 Typeinfo 引用”错误
编译 C 程序时经常遇到“未定义的 TypeInfo 引用”错误克。它表示链接器无法找到特定类的类型信息,这可能有多种原因。
原因:声明没有定义的虚拟函数
一个常见原因此错误是在声明虚拟函数时未在同一编译单元中提供其定义。当你声明一个虚函数而不定义它时,你就表明它的定义存在于其他地方,要么在后续的编译单元中,要么在外部库中。
因此,在链接阶段,编译器会在其他地方搜索该虚函数的定义。目标文件或库。如果找不到定义,则会引发“对 typeinfo 的未定义引用”错误。
示例:不正确的声明
virtual void fn();
此声明通知编译器名为 fn() 的虚函数存在,但它没有提供具体的
示例:正确的定义
virtual void fn() { /* Implementation code here */ }
当您向虚函数提供定义时,链接器不再需要在其他地方搜索它,从而解决了错误。
类比:外部变量解决方案
该行为类似于在一个编译单元中声明外部变量并尝试在另一个单元中访问它而不提供显式定义:
extern int i; int *pi = &i;
这里,变量i 是外部声明的,表明它的定义位于另一个编译单元中。如果此定义在链接时不可用,编译器将生成“未定义引用”错误。
了解此错误的根本原因对于避免该错误并确保成功编译 C 代码至关重要。
以上是为什么 g 会产生'对 typeinfo 的未定义引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!