Question:
I am having lots of trouble calling a class member function pointer that is declared within the same class. So far the following compiles:
class testClass {public: void (testClass::*ptr)(); testClass(); // constructorprivate: void testFunc();}testClass:testClass() { ptr = &(testClass::testFunc);};
Now I cannot find a way of calling this function pointer from outside the object:
void main() { testClass test; test.*ptr(); // ERROR: does not compile}
I would be very grateful if you could give some assistance.
Answer:
Most pointer-to-member variables are not actually members of a class. For example, you might do something like this:
void (testClass::*ptr2)();ptr2 = &(testClass::testFunc);(test.*ptr2)();This code declares a pointer-to-member variable called
ptr2
that is not part of the class it references. However, this doesn’t work in your case because testFunc
is a private member. The thing to realize is that, in the line:(test.*ptr2)();
ptr2
is a separate variable. In your case, however, ptr
is actually a class member. Therefore, you need additional work to specify the scope for ptr
:(test.*(test.ptr))();Not a pretty sight. But, then again, pointer-to-member variables never have been.