我知道未解析的外部符号意味着编译器无法找到定义。
我收到了这个错误
严重级代码说明项目文件行 错误LNK2001未解析的外部符号" private:static class std :: set,class std :: allocator>虚拟世界:: vWords" (?vWords @ VirtualWorld @@ 0V?$ set @ HU?$ less @ H @ std @@ V?$ allocator @ H @ 2 @@ std @@ A)ConsoleApplication11 c:\ Users \ Laptop \ documents \ visual studio 2015 \ Projects \ ConsoleApplication11 \ ConsoleApplication11 \ Source.obj 1
使用下面的代码(此代码是片段,但它仍会生成此错误)
#include <set>
#ifndef _TYPE_ID
#define _TYPE_ID
typedef unsigned int Id;
#endif
#ifndef _CLASS_VIRTUALWORLD
#define _CLASS_VIRTUALWORLD
class VirtualWorld
{
private:
static Id freeCounter;
static std::set<Id> vWorlds;
bool holding;
Id virtualWorldId;
static Id hold();
static void release(const Id & i);
public:
VirtualWorld();
~VirtualWorld();
Id getInstance();
void forceRelease();
};
#endif
int main() {
VirtualWorld virWorld;
return 0;
}
Id VirtualWorld::freeCounter = 1;
Id VirtualWorld::hold() {
std::set<Id>::iterator iter = vWorlds.lower_bound(freeCounter);
while (iter != vWorlds.end() && *iter == freeCounter)
{
++iter;
++freeCounter;
}
return freeCounter++;
}
void VirtualWorld::release(const Id & i) {
vWorlds.erase(i);
freeCounter = 1;
}
VirtualWorld::VirtualWorld() : holding(false) { }
VirtualWorld::~VirtualWorld()
{
if (holding) {
release(virtualWorldId);
}
}
Id VirtualWorld::getInstance() {
if (!holding) {
virtualWorldId = hold();
holding = true;
}
return virtualWorldId;
}
void VirtualWorld::forceRelease() {
if (holding) {
release(virtualWorldId);
holding = false;
}
}
我研究过我收到此错误,然后尝试访问 hold()和 release(int)函数中的 vWorlds 。为什么我会收到此错误,我应该更改哪些内容?