好的,我是 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/