我正在尝试将string
哈希到pointer to a void function which takes in a string
。尝试将我的键值对插入地图时出现以下错误:
“没有匹配的成员函数来调用”insert“
我不确定如何解释此错误。
我想我要么输入错误的类型进行插入,函数引用错误,要么输入错误的函数指针。
#include <string>
#include <unordered_map>
using namespace std;
void some_function(string arg)
{
//some code
}
int main(int argc, const char * argv[]) {
typedef void (*SwitchFunction)(string);
unordered_map<string, SwitchFunction> switch_map;
//trouble with this line
switch_map.insert("example arg", &some_function);
}
任何建议都将受到赞赏。
答案 0 :(得分:5)
如果您查看std::unordered_map::insert
的重载,您会看到以下内容:
std::pair<iterator,bool> insert( const value_type& value );
template< class P >
std::pair<iterator,bool> insert( P&& value );
std::pair<iterator,bool> insert( value_type&& value );
iterator insert( const_iterator hint, const value_type& value );
template< class P >
iterator insert( const_iterator hint, P&& value );
iterator insert( const_iterator hint, value_type&& value );
template< class InputIt >
void insert( InputIt first, InputIt last );
void insert( std::initializer_list<value_type> ilist );
没有insert(key_type, mapped_type)
,这是你要做的。你的意思是:
switch_map.insert(std::make_pair("example arg", &some_function));
答案 1 :(得分:5)
如果您想在地图中放置新条目,而不实际创建新条目(又名std::pair
),请使用以下两种形式之一:
switch_map.emplace("example.org", &some_function);
// OR:
switch_map["example.org"] = &some_function;
方法insert
仅用于将PAIRS添加到地图中
如果您需要使用插入,那么您必须成对,@Barry中说明的his answer。
答案 2 :(得分:0)
以下代码正常运行。
#include<iostream>
#include <string>
#include <unordered_map>
using namespace std;
void some_function(string arg)
{
return;
//some code
}
int main(int argc, const char * argv[]) {
typedef void (*SwitchFunction)(string);
unordered_map<string, SwitchFunction> switch_map;
//trouble with this line
switch_map.insert(std::make_pair("example arg", &some_function));
}
您必须使用std :: make_pair来插入值。