2016-03-07 108 views
2

i'me得到的错误在xcode的用于架构x86_64的 未定义符号: “餐馆::餐厅()”,从引用:在main.o中 LD _main:符号(S )未找到架构x86_64的 铛:错误:连接命令,退出代码为1(使用-v没有看到调用)未定义的符号:C++

这是我的代码:

#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; 

} 

请帮助。

+0

检查class'Restaurant();' – vcp

回答

1

您有以下方法声明:

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

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

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

这是因为正在创建该类型的对象的时候,构造函数自动调用,就像这里:

//.. 
Restaurant mimmos; 
//.. 

。你从来没有真正结束尝试调用Restaurant::getShifts(或其他非构造函数的方法),所以没有错误。

您可以将构造函数定义为默认构造函数(这可以让您的编译器为您做出合理的构造函数),或者您可以定义自己的构造函数,而这正是您似乎想要做的。

+0

“的构造函数定义感谢您的深入解释。工作。 – Visions23

+0

@ Visions23如果它对您有帮助,请标记为正确的解决方案,谢谢! –

1
class Restaurant { 

    Restaurant() = default; 
    ... 
}; 

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