2012-11-22 49 views
1

我寫了一類名爲UserScore用於建築x86_64的錯誤未定義的符號:C++編譯

//header 
using namespace std; 
class UserScore{ 
public: 
    UserScore(const int &user_id, const int &rating); 

private: 
    int _user_id; 
    int _rating; 
}; 


//cpp 
#include "UserScore.h" 
UserScore::UserScore (const int &user_id, const int &rating): 
    _user_id(user_id), 
    _rating(rating) 
{ 

} 

編譯命令是:

g++ src/UserScore.cpp -o obj/UserScore.o 

但是,爲什麼這個簡單的事情不會編譯?

的錯誤是:

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
+1

我想你需要使用'-c'選項來停止它試圖鏈接到一個完整的可執行文件。它不能做,因爲你必須有一個'main()'。你不這樣做。 – BoBTFish

+0

是的,它的工作原理。非常感謝..... –

+1

沒問題。此外,你可能已經放棄了節省空間,但你應該使用頭衛隊。 '使用名稱空間標準'通常被認爲是不好的做法,特別是在頭文件中。請參閱http://www.parashift.com/c++-faq/using-namespace-std.html – BoBTFish

回答

2

您需要包括-c選項編譯行,如果你想生成目標文件,否則編譯器假定你正在試圖建立一個可執行文件,並會抱怨,如果你沒有main()方法(這是發生在這裏)。

爲了一個目標文件,稍後將鏈接到有一個「主()」方法,它需要使用一個代碼文件

g++ -c src/UserScore.cpp -o obj/UserScore.o

這是我認爲你正在嘗試去做。

或者,您只需要在代碼中添加主函數,然後就可以創建可執行文件。

//header 
using namespace std; 
class UserScore{ 
public: 
    UserScore(const int &user_id, const int &rating); 

private: 
    int _user_id; 
    int _rating; 
}; 


//cpp 
#include "UserScore.h" 
UserScore::UserScore (const int &user_id, const int &rating): 
_user_id(user_id), 
_rating(rating) 
{ 

} 

int main() 
{ 
    return 0; 
}