错误C2663:'std :: _ Hash< _Traits> :: insert':3个重载没有'this'指针的合法转换

时间:2012-03-14 16:18:44

标签: c++ insert qualifiers

请考虑以下代码:

#include <unordered_map>

struct A {};

struct T
{
    std::unordered_map<std::string, A> _map;
};

struct L
{
    std::shared_ptr<const T> _c;
};


class f {
    void oid (std::shared_ptr<L> l, std::string st, A a) {
        l->_c->_map.insert(std::make_pair(st,a));
    }
};

在编译期间,它会抛出以下错误:

  

错误C2663:&#39; std :: _ Hash&lt; _Traits&gt; :: insert&#39; :3个超载没有合法性   转换为&#39;这个&#39;指针             同             [                 _Traits =标准:: TR1 :: _ Umap_traits,性病:: equal_to&GT;,的std ::分配器&GT;,假&gt;             ]

我尝试从const移除std::shared_ptr<const T> _c;(不是我认为这很重要),但它构建了其他一些错误......

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

您正在尝试插入已声明为unordered_map的{​​{1}},这是不允许的。为什么const_cL ???这有效地使共享指针管理的对象上的shared_ptr<const T>成为一个常量对象,您将无法对其进行修改。