了解"Undefined symbols for architecture"错误

Understanding a "Undefined symbols for architecture" error

本文关键字:architecture 错误 for symbols Undefined 了解      更新时间:2023-10-16

好的,我是 c++ 的新手,所以我试图了解我可以从错误消息中获得哪些信息。

这是错误消息

建筑的未定义符号x86_64:  "PieceClothing::P ieceClothing(int(",参考自:      ClothingInventory::getPieceOfClothing(long( in ClothingInventory.o      ClothingInventory::insertIntocloset(std::basic_string, std::分配器>(in ClothingInventory.o  "PieceClothing::P ieceClothing((",引用自:      ClothingInventory::ClothingInventory((in ClothingInventory.o      ClothingInventory::ClothingInventory(std::basic_string, std::分配器>(in ClothingInventory.o      std::map, std::分配器>>::operator[](long const&(in ClothingInventory.oLD:在建筑x86_64中找不到符号收集2:LD 返回 1 个退出状态

以下是我的理解:
- 有两个错误;
- 一个与getPieceOfClothing和insertIntocloset有关;
- 构造函数中的其他可能是关于我那里的地图和/或迭代器。

澄清一下,我不附加代码,因为问题的重点是理解我可以从消息中获得的所有信息。

感谢您的任何帮助。

错误实际上是关于构造函数的:

PieceClothing::PieceClothing(int)
PieceClothing::PieceClothing()

他们说没有找到他们的符号。这通常是以下任一迹象:

  • 他们没有实现
  • 它们已实现,但实现所在的文件未编译
  • 您是从不与定义它们的模块链接的其他模块引用它们的

错误列表中的其他详细信息仅说明调用构造函数的位置。例如,如果您有:

ClothesInventory::getPieceOfClothing(long)
{
   PieceClothing p;
}

引用构造函数是因为您尝试创建该类型的对象。

其工作原理可以分为两部分:

1( 编译器检查定义类的头文件,并查看默认构造函数是否可用。它找到构造函数,所以它给出它的确定。

2(链接器开始工作。它在目标文件和引用的库中查找与您的调用匹配的符号。这就是你出错的地方。

该消息告诉您它找不到已声明的构造函数的定义 PieceClothing::PieceClothing(int)PieceClothing::PieceClothing()因此您需要检查是否已编写它们,如果是,则检查包含它们的对象文件是否构成链接的一部分。

如果链接器输出很详细,它应该显示正在链接的对象文件。

相关文章: