带有类指针的C ++映射在编译时会出错

时间:2013-03-16 08:13:04

标签: c++

我有一个带字符串和类指针的地图。 我来自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

2 个答案:

答案 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::前缀。特别是在标题