Search code examples
c++pointersfunction-pointers

C++ How to make function pointer to class method


I'm having trouble making a function pointer to a class method. I made a function pointer to a non-class method and it works fine.

int foo(){
    return 5;
}

 int main()
{
    int (*pointer)() = foo;

    std::cout << pointer();

    return 0;
}

I tried to apply this to have an instance variable in a class be a function pointer.

This is the header file. It declares the private method Print which the variable method will point to.

class Game
{

public:

    Game();

private:

    void Print();

    void (method)( void );

};

The Game constructor attempts to assign the pointer method to the address of the Print method. Upon compile, an error comes up at that line saying "error: reference to non-static member function must be called;". I don't know what that means. Whats the correct way of implementing this?

Game::Game( void )
{

    method = &Game::Print;

}

void Game::Print(){
    std::cout << "PRINT";
}

Solution

  • A member function is quite a bit different from an ordinary function, so when you want to point to a member function you need a pointer-to-member-function, not a mere pointer-to-function. The syntax for a pointer-to-member-function includes the class that the member function is a member of:

    void (Game::*mptr)();
    

    This defines a pointer-to-member-function named mptr that holds a pointer to a member function of the class Games that takes no arguments and returns nothing. Contrast that with an ordinary function pointer:

    void (*ptr)();
    

    This defined a pointer-to-function named ptr that holds a pointer to a function that takes no arguments and returns nothing.