【问题标题】:Undefined symbols for architecture x86_64: c++架构 x86_64 的未定义符号:c++
【发布时间】:2016-06-20 14:34:36
【问题描述】:

我在 xcode 中遇到错误 架构 x86_64 的未定义符号: “Restaurant::Restaurant()”,引用自: main.o 中的 _main ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

这是我的代码:

#include <iostream>
using namespace std;


class Restaurant
{
public:
    Restaurant();
    int getTables();
    int getTempStaff();
    int getPermStaff();
    string getShifts();
    string getMenu(string menu);
private:
    string Menu;
    int Tables;
    int TempStaff;
    int PermStaff;
    string Shifts[3];
};

string Restaurant::getMenu(string menu)
{
    Menu = menu;
    return menu;
}

int main()
{
    Restaurant mimmos;


    string Menu;
    cout<<"Menu: ";
    cin>>Menu;
    cout<<mimmos.getMenu(Menu);

    return 0;

}

请帮忙。

【问题讨论】:

  • 检查类`Restaurant();`的构造函数定义;

标签: c++ xcode


【解决方案1】:

您声明了以下方法:

Restaurant();
int getTables();
int getTempStaff();
int getPermStaff();
string getShifts();
string getMenu(string menu);

.. 你在下面定义了Restaurant::getMenu。这里的问题是,虽然你声明了Restaurant::Restaurant(构造函数),但你还没有定义它。

Restaurant::getShifts 确实如此,为什么你也没有收到错误消息?

这是因为在创建该类型的对象时会自动调用构造函数,如下所示:

//..
Restaurant mimmos;
//..

。您实际上永远不会尝试调用 Restaurant::getShifts (或其他非构造方法),因此没有错误。

您可以将构造函数定义为默认的(允许您的编译器为您创建一个合理的构造函数),就像另一个回答者所说的那样,或者您可以定义自己的,这就是您似乎想要做的事情。

【讨论】:

  • 感谢您的深入解释。工作。
  • @Visions23 如果对您有帮助,请将解决方案标记为正确,谢谢!
【解决方案2】:
class Restaurant {

    Restaurant() = default;
    ...
};

将为您提供餐厅的默认构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 2012-07-20
    • 2014-05-14
    • 2015-06-17
    • 2016-03-25
    相关资源
    最近更新 更多