请考虑以下代码:
#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;
(不是我认为这很重要),但它构建了其他一些错误......
感谢您的帮助!
答案 0 :(得分:4)
您正在尝试插入已声明为unordered_map
的{{1}},这是不允许的。为什么const
在_c
内L
???这有效地使共享指针管理的对象上的shared_ptr<const T>
成为一个常量对象,您将无法对其进行修改。