I am trying to hash a string
to a pointer to a void function which takes in a string
. I get the following error when trying to insert my key value pair into the map:
"No matching member function for call to "insert"
I am not sure how to interpret this error.
I think I'm either passing in the wrong type for insert, the function reference incorrectly, or typedef'ing a function pointer wrong.
#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);
}
Any advice would be appreciated.
If you look at the overloads for std::unordered_map::insert
, you'll see these:
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 );
There is no insert(key_type, mapped_type)
, which is what you're trying to do. What you meant was:
switch_map.insert(std::make_pair("example arg", &some_function));