ошибка C2663: 'std :: _ Hash <_Traits> :: insert': 3 перегрузки не имеют законного преобразования для указателя 'this' - PullRequest
2 голосов
/ 14 марта 2012

Рассмотрим следующий код:

#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 = станд :: tr1 :: _ Umap_traits, станд :: equal_to>, станд :: Распределитель>, ложь> ]

Я пытался удалить const из std::shared_ptr<const T> _c; (не то, чтобы я думал, что это имеет значение), но это создает некоторые другие ошибки ...

Спасибо за вашу помощь!

1 Ответ

4 голосов
/ 14 марта 2012

Вы пытаетесь вставить в unordered_map, который вы объявили const, что недопустимо.Почему _c внутри L a shared_ptr<const T> ???Это фактически делает _map объекта, управляемого общим указателем, постоянным объектом, и вы не сможете его изменить.

...