&#39;未解决的外部符号&#39;然后尝试访问静态集<int>&#39;

时间:2016-01-25 13:29:20

标签: c++ static static-methods static-members

我知道未解析的外部符号意味着编译器无法找到定义。

我收到了这个错误

  

严重级代码说明项目文件行   错误LNK2001未解析的外部符号&#34; private:static class std :: set,class std :: allocator&gt;虚拟世界:: vWords&#34; (?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 。为什么我会收到此错误,我应该更改哪些内容?

0 个答案:

没有答案