我有一个像这样定义的分配器
typedef share_ptr<boost::unordered_map<int,string>> T;
boost::unordered_map<int,T> webData;
...
webData[100]=T(new boost::unordered_map<int,string>(make_pair(100,"json data returned")));
我总是在此webData
行no instance of boost::unordered_map<K,T,H,P,A>....matches the argument list
答案 0 :(得分:0)
boost::unordered_map没有构造函数接受std :: pair实例作为参数。要摆脱错误,必须编写类似
的内容#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>
#include <string>
typedef boost::shared_ptr<boost::unordered_map<int, std::string> > T;
int main() {
boost::unordered_map<int, T> webData;
webData[100] = T(new boost::unordered_map<int, std::string>());
webData[100]->insert(std::make_pair(100, "json data returned"));
return 0;
}
coliru上的相同代码是here。
答案 1 :(得分:0)
除了已经给出的解释之外,你可以使用统一初始化和emplace
来减少一些冗长:
<强> Live On Coliru 强>
#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>
#include <string>
typedef boost::shared_ptr<boost::unordered_map<int, std::string> > T;
int main() {
boost::unordered_map<int, T> webData;
webData[100] = T(new T::element_type { { 100, "json data returned" } });
webData[100]->emplace(200, "more json");
}