架构的未定义符号x86_64:c ++

时间:2016-03-07 05:51:11

标签: c++ xcode

我在xcode中收到错误  架构x86_64的未定义符号:   “餐厅::餐厅()”,参考自:       _main在main.o中 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;

}

请帮忙。

2 个答案:

答案 0 :(得分:1)

class Restaurant {

    Restaurant() = default;
    ...
};

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

答案 1 :(得分:1)

您声明了以下方法:

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

..您已在下面定义了Restaurant::getMenu。这里的问题是,尽管您已经声明Restaurant::Restaurant(构造函数),但您还没有定义它。

但是Restaurant::getShifts这是真的,为什么你也没有得到错误呢?

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

//..
Restaurant mimmos;
//..

。你实际上最终没有尝试调用Restaurant::getShifts(或其他非构造函数方法),所以没有错误。

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