我有这个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。
有什么想法吗?谢谢你的建议!
答案 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文件中声明才能实例化