2013-03-16 57 views
1

我有一個帶有字符串和類指針的映射。 我來自JAVA,所以請指導我。帶類指針的C++映射在編譯時出錯

class Client { 

public: 
    static map<string, Client*> CLIENTS; 
    Client(string dir); 
    static Client* get_client(string name); 
    virtual ~Client(); 
}; 

我get_client方法是

Client* Client::get_client(string name) { 
     map<string, Client*>::iterator it = CLIENTS.find(name); 
} 

給我下面

Undefined symbols for architecture x86_64: 
    "Client::CLIENTS", referenced from: 
     Client::get_client(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in client.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
+1

如果你的'get_client'正文與你發佈的完全一樣,那就沒有意義了 – borisbn 2013-03-16 08:22:59

+0

@borisbn我在試圖定位問題時刪除了很多代碼 – Kathick 2013-03-16 09:06:34

回答

2

錯誤您需要定義你只宣佈CLIENTS。所以class Client{之外,在你的clients.cpp文件中添加

std::map<std::string, Client*> Client::CLIENTS; 

順便說一句,我覺得名字CLIENTS相當混亂。也許它應該是client_dict

不要忘記編譯調試信息和所有警告,例如,在Linux上使用g++ -Wall -g。改進你的代碼,直到沒有給出警告(你的get_client會得到一些)。並學習如何使用調試器(例如,Linux上的gdb)。

+0

我添加了std :: map 客戶端;在cpp文件中,我仍然遇到同樣的問題 – Kathick 2013-03-16 08:58:42

+0

對不起,應該是'client :: CLIENTS' – 2013-03-16 09:06:25

1

添加

map<string, Client*> Client::CLIENTS; 

cpp文件。 並且不要在STL類之前省略std::前綴。特別是在標題中