2014-01-13 65 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