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

这是错误信息

体系结构 x86_64 的 undefined symbol :
"PieceClothing::PieceClothing(int)",引用自:
ClothesInventory.o 中的 ClothesInventory::getPieceOfClothing(long)
ClothesInventory::insertIntocloset(std::basic_string, std::allocator >)in ClothesInventory.o
“PieceClothing::PieceClothing()”,引用自:
ClothesInventory::ClothesInventory() 在 ClothesInventory.o
ClothesInventory::ClothesInventory(std::basic_string, std::allocator >)in ClothesInventory.o
std::map, std::allocator > >::operator[](long const&)in ClothesInventory.o
ld:找不到架构 x86_64 的符号
collect2: ld 返回 1 个退出状态

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

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

谢谢你的帮助。

最佳答案

错误实际上与构造函数有关:

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

他们说没有找到适合他们的符号。这通常是以下任一情况的标志:
  • 他们没有实现
  • 它们已实现,但未编译实现所在的文件
  • 你是从一个不同的模块引用它们的,该模块不与定义它们的模块链接

  • 错误列表中的其他详细信息仅说明调用构造函数的位置。例如,如果您有:
    ClothesInventory::getPieceOfClothing(long)
    {
       PieceClothing p;
    }
    

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

    它的工作原理可以分为两部分:

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

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

    关于c++ - 了解 "Undefined symbols for architecture"错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10349356/

    10-11 15:53