c ++中的静态地图初始化

IUn*_*own 0 c++ static initialization map

有许多类似的问题,实际上我从其他几个帖子中编写了以下代码.不幸的是,我仍然有一个错误,我似乎无法破解 - 虽然我做了很多15年前的c ++开发.

我想使用地图制作一个简单的静态查找表.

这是到目前为止的代码(代码css似乎不能很好地呈现它):

enum RegionCodeEnum
{
    One,
    Two,
    Three
};

enum DeviceCodeEnum
{
    AAA,
    BBB,
    CCC
};

class LookupTable
{
    friend class constructor;

    struct constructor 
    {
        constructor() 
        { 
            table[One] = AAA;
            table[Two] = AAA;
            table[Three] = CCC;
        }
    };

    static constructor cons;

public:
    LookupTable(void);

    static DeviceCodeEnum GetDeviceFromRegion(RegionCodeEnum RegionCode);

private:
    static map<RegionCodeEnum, DeviceCodeEnum> table;
};

LookupTable::constructor LookupTable::cons;

LookupTable::LookupTable(void)
{

}

DeviceCodeEnum LookupTable::GetDeviceFromRegion(RegionCodeEnum RegionCode)
{
    return table[RegionCode];
}
Run Code Online (Sandbox Code Playgroud)

从其他地方代码我有这个代码:

DeviceCodeEnum code= LookupTable::GetDeviceFromRegion(One);
Run Code Online (Sandbox Code Playgroud)

我得到的编译错误是:

error LNK2001: unresolved external symbol "private: static class std::map<enum RegionCodeEnum,enum DeviceCodeEnum,struct std::less<enum DeviceCodeEnum>,class std::allocator<struct std::pair<enum RegionCodeEnum const ,enum DeviceCodeEnum> > > LookupTable::table" (?table@LookupTable@@0V?$map@W4RegionCodeEnum@@W41@U?$less@W4DeviceCodeEnum@@@std@@V?$allocator@U?$pair@$$CBW4DeviceCodeEnum@@W41@@std@@@3@@std@@A)   C:\_dev\temp\test\main.obj  Refactor01
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

K-b*_*llo 6

您缺少定义table.代码中的某处应该说:

map<RegionCodeEnum, DeviceCodeEnum> LookupTable::table;
Run Code Online (Sandbox Code Playgroud)

正如你所做的那样constructor cons.