首页 >后端开发 >C++ >为什么在 C 中会出现'未定义符号”和'Typeinfo”错误以及如何修复它们?

为什么在 C 中会出现'未定义符号”和'Typeinfo”错误以及如何修复它们?

Patricia Arquette
Patricia Arquette原创
2024-10-30 03:51:03250浏览

Why Do I Get

解决 C 中的“Undefined Symbols”和“Typeinfo”错误

编译过程中遇到“Undefined Symbols”和“Typeinfo”等错误可能会令人费解。本文旨在阐明这些错误并提供解决方案。

了解 Vtable 和 Typeinfo

  • Vtable(虚拟方法表): 包含指向类的虚拟方法的指针的数据结构。它允许对虚拟方法进行多态调用,其中派生类可以重写其基类中的方法。
  • Typeinfo: 有关类类型的信息,例如其名称和方法。此信息用于动态类型识别和运行时类型信息访问。

错误分析

给定的错误消息表明 Obstacle 类的 vtable 的符号和类型信息丢失。这可能是由多种原因引起的:

  1. 缺少纯虚拟方法:抽象基类要求将其所有虚拟方法声明为“纯虚拟”,即使用 = 0 在其声明的末尾。如果纯虚方法没有被派生类重写,则表明缺少实现。
  2. 未定义的非虚方法:如果抽象基类包含任何非纯虚函数,编译器假设它们在某处实现。如果没有实现,必要的内部结构(vtable 和 typeinfo)将会丢失。

解决方案

要解决该错误,您应该:

  1. 声明纯虚方法:确保 Obstacle 类的虚方法声明为纯虚方法。
  2. 实现非虚方法:如果 Obstacle 类包含任何非纯虚函数,请确保它们在派生类中实现。

一旦满足这些条件,编译器将能够生成必要的 vtable 和 typeinfo 结构,并且应该解决编译错误。

以上是为什么在 C 中会出现'未定义符号”和'Typeinfo”错误以及如何修复它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn