I'm trying to declare a std::map that is keyed by a char and has a function pointer as a second parameter, these functions would be a member function of my class. But for some odd reason I cannot call the functions when extracted...

So, I have a class A as shown below, it contains a map as well as a function

class A
	map<char, void (A::*)(void)> mapA;
	void func();

Next I have main code that looks like this:

A::A()	// constructor
	// Generate User Options
	mapA['a'] = &A::func;

Now, I try to execute func by extracting it from the map and running the function:

map<char, void (A::*)(void)>::iterator it;
	for ( it=mapA.begin() ; it != mapA.end(); it++ )

I would assume this would launch function "func" as it is stored in the map, but instead it generates the following error message:
error C2064: term does not evaluate to a function taking 0 arguments

Any help would be greatly appreciated...

8 Years
Discussion Span
Last Post by Laiq Ahmed

try the following.

the syntax seems difficult but look it carefully.


the easier way is to create the typedef and assign the return value of m to that, and then call that pointer to member function.

like below.

typedef void (A::*FMemPtr)(void);

map<char, FMemPtr> m;
m['a'] = &A::func;

FMemPtr funcPtr = m['a'];
A obj;

same goes for iterator.

hope this helps

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.