这个问题在这里已有答案:
我想要做的是在c类中基本上有一个键值存储,以便我可以通过键查找它的值 . 我一直在尝试使用unordered_map来执行类似于此的代码 . (我已经简化了一点,但你明白了) .
#include <string>
#include <unordered_map>
#include <iostream>
class manager
{
public:
manager() {}
~manager(){}
void add(const std::string& name, unsigned int val) {
map.insert(std::make_pair<std::string, unsigned int>(name, val));
}
unsigned int GetValue(const std::string& key) {
return map[key];
}
std::unordered_map<std::string, unsigned int> map;
};
int main(void)
{
manager* mgr = new manager();
mgr->add("Bob",22);
std::cout << "Bob is" << mgr->GetValue("Bob") << std::endl;
return 0;
}
我只想以一种方式存储名称和值,以便我可以轻松地按名称查找值,并在完成后轻松清理它以避免内存泄漏 .
当我在Linux(g -o test test.cpp)上编译它时,我得到以下内容:
test.cpp:在成员函数'void manager :: add(const string&,unsigned int)':test.cpp:12:65:error:没有用于调用'make_pair(const string&,unsigned int&)'map的匹配函数.insert(std :: make_pair(name,val)); ^来自/ usr / include / c /6/bits/stl_algobase.h:64:0的文件,来自/ usr / include / c /6/bits/char_traits.h:39,来自/ usr / include / c / 6 / string:40,来自test.cpp:1:/ usr / include / c /6/bits/stl_pair.h:497:5:注意:候选人:模板constexpr std :: pair :: __ type,typename std :: __decay_and_strip <_T2> :: __ type> std :: make_pair(_T1 &&,_T2 &&)make_pair(_T1 && __ x,_T2 && y)^ ~~~~~~~~ / usr / include / c /6/bits/stl_pair.h:497 :5:注意:模板参数推断/替换失败:test.cpp:12:56:注意:不能将'name'(类型'const string ')转换为'std: : cxx11 :: basic_string &&'map.insert(std :: make_pair(name,val));
1 回答
std::make_pair签名是错误的 . 应该: