2016-03-07 133 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的默認構造函數。