【问题标题】:How to put const string value in map如何将常量字符串值放入地图
【发布时间】:2013-09-10 15:13:13
【问题描述】:

我要制作地图,

std::map <MESSAGE_CATEGORY, const std::string> m_mapResponseDesc;

我正在使用operator[] 在地图中附加一个值:

m_mapResponseDesc[STATUS_LIMIT] = "Limit has been exceeded";

STATUS_LIMIT 的类型为 enum

我收到错误:

错误 C2678: 二进制 '=' : 未找到采用 'const std::basic_string<_elem>' 类型的左操作数的运算符(或没有可接受的转换)

请指出我犯了什么错误。我没有任何线索。

【问题讨论】:

    标签: c++ stl


    【解决方案1】:

    由于operator[] 返回一个引用(对const std::string),您将需要改用insert() 方法。

    #include <map>
    #include <string>
    using namespace std;
    
    int main()
    {
       std::map<int, const std::string> m;
       m.insert(std::make_pair(1, "Hello"));
       return 0;
    }
    

    C++11 更新:

    您现在可以更轻松地做到这一点:

    std::map<int, const std::string> status = {
            {200, "OK"},
            {404, "Not Found"}
        };
    

    【讨论】:

    • 当你说 [] 返回一个引用时,我没听懂。任何参考对象 = 某事 // 是可能的。如果这是一个非常基本的问题,我很抱歉。
    • 引用对象仅在非const 时才允许赋值,但是从operator[] 返回的引用将是const std::string&amp;,它不允许赋值(会导致编译器错误,就是你看到的那个)。
    猜你喜欢
    • 2022-07-25
    • 2019-08-14
    • 1970-01-01
    • 2011-08-25
    • 2016-01-02
    • 2011-12-09
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多