2014-01-13 3 views
2

Я использую std :: unordered_map в первый раз, и у меня возникла проблема с вставкой в ​​созданную мной карту.std :: unordered_map insert error shared_ptr C++

ClassA Заголовок:

Class ClassA 
{ 
public: 
    void func(); 
private: 
    std::unordered_map<std::string, std::shared_ptr<ClassB>> map; 
} 

ClassA каст:

void ClassA::func() 
{ 
    map = std::unordered_map<std::string, std::shared_ptr<ClassB>>(); 
    map.insert("string", std::make_shared<ClassB>()); 
} 

Я получаю ошибку C2664 станд :: _ List_iterator < _Mylist> станд :: _ Hash < _Traits> :: вставка (станд :: _List_const_iterator < _Mylist>, std :: pair < _Ty1, _Ty2> & &) ': невозможно преобразовать параметр 1 из' const char [17] 'в' std :: _ List_const_iterator < _M ylist> '

Любые идеи?

ответ

2

Проблема не с shared_ptr, а с ключом string. Явная реализация будет решить эту проблему. Кроме того, необходимо вставить pair состоящий из ключа и значения, а не ключа и значения отдельно:

map.insert(std::make_pair (std::string("string"), std::make_shared<ClassB>())); 

Смотрите также this related answer для более романа, albiet более сложное решение.

+0

Спасибо, std :: make_pair сделал эту работу с явным созданием строкового ключа или без него. еще раз спасибо. – Daniel

Смежные вопросы