c++中的静态映射初始化

static map initialization in c++

本文关键字:映射 初始化 静态 c++      更新时间:2023-10-16

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

我想用一个map做一个简单的静态查找表。

下面是到目前为止的代码(代码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];
}

From else where in code我有这个代码:

DeviceCodeEnum code= LookupTable::GetDeviceFromRegion(One);
我得到的编译错误是:
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:_devtemptestmain.obj  Refactor01

任何想法吗?

您缺少table的定义。在代码的某个地方应该写:

map<RegionCodeEnum, DeviceCodeEnum> LookupTable::table;

就像你对constructor cons做的那样