C ++中的静态unordered_map指针初始化

时间:2015-03-07 17:39:20

标签: c++

我有这个C ++代码:

Client.h:

#include <unordered_map>

using namespace std;

class Client{
    static unordered_map<int, Client*>* clients;
public:
    static void initializeClients();
}

Client.cpp

#include "Client.h"
#include <unordered_map>

using namespace std;

 void Client::initializeClients(){
     clients = new unordered_map<int, Client*>();
}

但链接器为unordered_map提供了一个LNK2001未解析的外部符号。我不知道我做错了什么,但似乎我错过了一些东西。我正在使用Visual Studio 2013。

有什么想法吗?谢谢你的建议!

1 个答案:

答案 0 :(得分:1)

您需要在cpp文件中声明客户端:

#include "Client.h"
#include <unordered_map>

using namespace std;
unordered_map* Client::clients;

 void Client::initializeClients(){
     clients = new unordered_map<int, Client*>();
}

explenation: 头文件只告诉链接器一些cpp文件有哪些符号。在头文件中声明一个变量不会使该变量由它自己出现。在这里你需要通过声明它来实例化cpp文件中的静态映射指针,并通过在头文件中指定它来让其他文件知道他

总结: 静态成员变量和全局变量也需要在某个cpp文件中声明才能实例化