1

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

2 回答 2

2

您需要定义CLIENTS您只声明的。所以外面class Client{,在你的clients.cpp文件中添加

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

顺便说一句,我觉得这个名字CLIENTS很混乱。也许应该是client_dict

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

于 2013-03-16T08:15:16.013 回答
1

添加

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

cpp归档。并且不要std::在 STL 类之前省略前缀。特别是在标题中

于 2013-03-16T08:18:29.160 回答