2013-03-16 60 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::前缀。特别是在标题中