带有类指针的c++ map在编译时给出错误

C++ map with class pointer gives error while compiling

本文关键字:编译 出错 错误 map 指针 c++      更新时间:2023-10-16

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

您需要定义您刚刚声明的CLIENTS。在class Client{之外,在clients.cpp文件中添加

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

顺便说一句,我发现CLIENTS这个名字很令人困惑。也许应该改成client_dict

不要忘记编译调试信息和所有警告,例如在Linux上使用g++ -Wall -g。改进你的代码,直到没有警告(你的get_client会得到一些)。并学习如何使用调试器(例如Linux上的gdb)。

添加

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

cpp文件。不要在STL类之前省略std::前缀。尤其是在header