2014-01-13 99 views
2

我第一次使用std :: unordered_map,並且在創建的地圖中插入問題。std :: unordered_map插入錯誤shared_ptr C++

ClassA的標題:

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

ClassA的CPP:

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

我收到錯誤C2664的std :: _ List_iterator < _Mylist>的std :: _哈希< _Traits> ::插入(標準:: _List_const_iterator < _Mylist>,std :: pair < _Ty1,_Ty2> & &)':不能將參數1從'const char [17]'轉換爲'std :: _ List_const_iterator < _M ''

有沒有想法?

回答

2

問題不在於shared_ptr,而在於string鍵。顯式實例化將解決這個問題。您還需要插入一個pair由鍵和值,而不是一個鍵和seperately的值:

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

this related answer查看更新穎,更albiet複雜的解決方案。

+0

謝謝,std :: make_pair使這個工作有或沒有顯式實例化字符串鍵。再次感謝。 – Daniel