C++ 无法访问常量静态std::map枚举结构

C++ 无法访问常量静态std::map枚举结构,c++,c++11,enums,C++,C++11,Enums,我正在尝试使用枚举结构映射,以确保在不存在默认值的情况下将其映射为配置值,并确保仅访问真实的配置值。No std::string get 因此,标题如下所示: enum ConfigValues { LOG_LEVEL, }; class Config { public: std::string get(const ConfigValues& key); private: struct ConfigMapping { std::strin

我正在尝试使用枚举结构映射,以确保在不存在默认值的情况下将其映射为配置值,并确保仅访问真实的配置值。No std::string get

因此,标题如下所示:

enum ConfigValues
{
    LOG_LEVEL,
};

class Config
{
public:
    std::string get(const ConfigValues& key);
private:
    struct ConfigMapping
    {
        std::string configKeyString;
        std::string defaultValue;
    };

    const static std::map<ConfigValues, ConfigMapping> m_mapping;
}
cpp包含以下内容:

const std::map<ConfigValues, Config::ConfigMapping> Config::m_mapping=
{
    {LOG_LEVEL, { "logLevel", "5" } },
};
std::string Config::get(const ConfigValues& key)
{
    std::string key = m_mapping[key].configKeyString; // <-- Does not work
}
但是我无法访问映射。

操作符[]不是std::map的常量

改用

在C++11之前:

如果不使用C++11,则必须使用具有常量版本的。运算符[]不是std::map的常量

改用

在C++11之前:


如果你不使用C++11,你必须使用一个常量版本。

Ah正确。我没看到。将在启用后几分钟内接受此设置。谢谢你的提示。我刚刚更新了我的答案,供那些寻找非C++11答案的人参考。啊,对了。我没看到。将在启用后几分钟内接受此设置。谢谢你的提示。我刚刚为寻找非C++11答案的人更新了我的答案。在Config::get中,参数和本地都被命名为key。这是示例代码中的输入错误还是实际问题?也许实际的编译器消息可能会让事情更清楚。另请参见Config::get中的,parameter和local都被命名为key。这是示例代码中的输入错误还是实际问题?可能实际的编译器消息会使事情更清楚。另请参阅