没有匹配的成员函数来调用 "insert" std::unordered_map
No matching member function for call to "insert" std::unordered_map
我正在尝试将 string
散列为 pointer to a void function which takes in a string
。尝试将我的键值对插入地图时出现以下错误:
"No matching member function for call to "插入
我不确定如何解释这个错误。
我想我要么为插入传递了错误的类型,要么函数引用不正确,要么函数指针的类型定义错误。
#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);
}
如有任何建议,我们将不胜感激。
如果您查看 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));
如果您想在地图中放置一个新条目,而不是自己实际创建一个新条目(又名 std::pair
),请使用以下两种形式之一:
switch_map.emplace("example.org", &some_function);
// OR:
switch_map["example.org"] = &some_function;
方法insert
仅用于将PAIRS添加到地图。
如果需要使用insert,那么必须做一对,如@Barry illustrated in .
以下代码运行良好。
#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 来插入值。
我正在尝试将 string
散列为 pointer to a void function which takes in a string
。尝试将我的键值对插入地图时出现以下错误:
"No matching member function for call to "插入
我不确定如何解释这个错误。
我想我要么为插入传递了错误的类型,要么函数引用不正确,要么函数指针的类型定义错误。
#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);
}
如有任何建议,我们将不胜感激。
如果您查看 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));
如果您想在地图中放置一个新条目,而不是自己实际创建一个新条目(又名 std::pair
),请使用以下两种形式之一:
switch_map.emplace("example.org", &some_function);
// OR:
switch_map["example.org"] = &some_function;
方法insert
仅用于将PAIRS添加到地图。
如果需要使用insert,那么必须做一对,如@Barry illustrated in
以下代码运行良好。
#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 来插入值。