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中にLあるのですshared_ptr<const T>か??? これ_mapにより、共有ポインターによって管理されるオブジェクトが定数オブジェクトになり、変更できなくなります。

于 2012-03-14T16:21:01.953 に答える