The name of an ordinary function is implicitly converted to its memory address. For example:
typedef int (*pf) ();
int func();
pf=func; // OK, 'func' is implicitly converted to '&func'
However, member functions don't behave this way. To take their address, you must precede the address-of operator to their qualified name:
class A;
typedef int (A::*pmf)();
class A
{
pmf p; //pointer to member
public:
int func();
A() { p=&A::func;} //OK
};
Note that the following code will cause a compilation error:
A() { p=func;} // error, '&A::' missing