我有一个带字符串和类指针的地图。 我来自JAVA所以请指导我。
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
答案 0 :(得分:2)
您需要定义您刚声明的CLIENTS
。因此,在class Client{
之外的clients.cpp
文件中添加
std::map<std::string, Client*> Client::CLIENTS;
顺便说一句,我发现名字CLIENTS
非常令人困惑。也许它应该是client_dict
不要忘记编译调试信息和所有警告,例如在Linux上使用g++ -Wall -g
。改进您的代码,直到没有给出警告(您的get_client
会得到一些警告)。并学习如何使用调试器(例如Linux上的gdb
)。
答案 1 :(得分:1)
添加
map<string, Client*> Client::CLIENTS;
到cpp
文件。
并且在STL类之前不要省略std::
前缀。特别是在标题