2

考虑以下代码:

#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: 'std::_Hash<_Traits>::insert' : 3 个重载对带有 [ _Traits=std::tr1::_Umap_traits,std::equal_to>,std::allocator> 的 'this' 指针没有合法转换,假>]

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

谢谢你的帮助!

4

1 回答 1

4

您正在尝试插入unordered_map您已声明为的const,这是不允许的。为什么_c里面Lshared_ptr<const T>???这有效地使_map共享指针管理的对象成为一个常量对象,您将无法修改它。

于 2012-03-14T16:21:01.953 回答