ошибка C2663: 'std::_Hash‹_Traits›::insert': 3 перегрузки не имеют допустимого преобразования для указателя this

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

#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 перегрузки не имеют допустимого преобразования для указателя this с помощью [ _Traits=std::tr1::_Umap_traits,std::equal_to>,std::allocator> ,ложь> ]

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

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


person elikbelik    schedule 14.03.2012    source источник
comment
Какие ошибки возникнут, если вы попытаетесь удалить const, что на самом деле имеет большое значение?   -  person David Rodríguez - dribeas    schedule 14.03.2012


Ответы (1)


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

person David Rodríguez - dribeas    schedule 14.03.2012
comment
Упс! Я сделал ту же ошибку из-за копирования и вставки, но я упустил из виду константу! - person BuvinJ; 15.04.2015