Apple Mach-O-Linker 错误:从(行)引用的变量在架构 x86-64 中找不到

Posted

技术标签:

【中文标题】Apple Mach-O-Linker 错误:从(行)引用的变量在架构 x86-64 中找不到【英文标题】:Apple Mach-O-Linker Error: Variable referenced from (line) not found in architecture x86-64 【发布时间】:2018-04-07 23:18:08 【问题描述】:

我正在为一个类项目开发一个 C++ 程序,我正在将对象数据从文件加载到列表中。我已经设置好了,所以数据读取就像在成员函数中一样完成,然后将该对象推送到列表中,然后重复,直到没有更多数据要加载。

我收到此错误:

架构 x86_64 的未定义符号:

“Product::Product(Product const&)”,引用自:

std::__1::list ::push_back(Product const&) 在 Week-2.o

ld:未找到架构 x86_64 的符号

clang: error: 链接器命令失败,退出代码为 1(使用 -v 查看调用)

主要功能:

Product temp;
list <Product> allProducts;

if (!temp.loadInitalData())

    cout << "There is no Product data available. Try a different option: ";
    cin >> choice;
    repeat = true;

else 
     while (temp.loadInitalData())
     
         allProducts.push_back(temp);   //This is where I'm getting the error
     
     temp.viewMenu();
     repeat = false;

产品的 loadInitalData() 函数:

bool Product::loadInitalData()

    bool moreData = true;
    fstream prodDatabase;
    prodDatabase.open("ProductDatabase.csv", ios::out|ios::in|ios::binary);
    if (!prodDatabase)
    
        cout << "File could not be successfully opened\n";
        moreData = false;
    
    else
    
        moreData = loadInitialItemData(prodDatabase);
    
    return moreData;

我在 main.cpp 文件中链接了“Product.h”,以及 .有什么建议吗?

【问题讨论】:

【参考方案1】:

您缺少 Product 类的复制构造函数。关于编译器何时提供如下所述的规则:

http://en.cppreference.com/w/cpp/language/copy_constructor

但如果复制 Product 对象是一项重要的操作,您可能仍需要编写一个。

考虑让您的列表成为 Product * 的列表(即指向 Product 的指针列表)。这样可以避免复制,并且很可能是您真正想要的。

【讨论】:

以上是关于Apple Mach-O-Linker 错误:从(行)引用的变量在架构 x86-64 中找不到的主要内容,如果未能解决你的问题,请参考以下文章

错误 IOS 10 - 无法从 https://mesu.apple.com/assets/ 复制资产类型 com.apple.MobileAsset.TextInput.SpellChecker 的

无法从 Apple 终端访问 SSL 站点和神秘的 curl 错误

错误消息:[MC] 从公共有效用户设置中读取和 [MC] systemgroup.com.apple.configurationprofiles 路径的系统组容器是

Apple 公证错误“团队尚未配置公证”

iPhone 和 Apple Watch 之间的 WatchConnectivity 超时错误

Apple 的 iAd 示例代码抛出错误