体系结构x86_64的未定义符号:c++

Undefined symbols for architecture x86_64: c++

本文关键字:符号 c++ 未定义 x86 体系结构      更新时间:2023-10-16

我在xcode中收到错误 建筑的未定义符号x86_64: "Restaurant::Restaurant()",引用自: _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;
}

请帮忙。

您声明了以下方法:

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

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

但是Restaurant::getShifts就是这样,为什么你没有收到错误呢?

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

//..
Restaurant mimmos;
//..

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

你可以

像另一个回答者所说的那样将构造函数定义为默认值(这允许你的编译器为你做一个明智的),或者你可以定义你自己的构造函数,这似乎是你无论如何都想做的。

class Restaurant {
    Restaurant() = default;
    ...
};

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