C如何使函数指针指向类方法

新手上路,请多包涵

我无法将函数指针指向类方法。我创建了一个指向非类方法的函数指针,它工作正常。

 int foo(){
    return 5;
}

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

    std::cout << pointer();

    return 0;
}

我试图应用它来让类中的实例变量成为函数指针。

这是头文件。它声明了变量方法将指向的私有方法 Print。

 class Game
{

public:

    Game();

private:

    void Print();

    void (method)( void );

};

Game 构造函数尝试将指针方法分配给 Print 方法的地址。编译时,该行出现错误,提示“错误:必须调用对非静态成员函数的引用;”。我不知道那是什么意思。实现这一点的正确方法是什么?

 Game::Game( void )
{

    method = &Game::Print;

}

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

原文由 j76goatboy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 298
1 个回答

成员函数与普通函数有很大不同,所以当你想指向一个成员函数时,你需要一个指向成员函数的指针,而不仅仅是指向函数的指针。指向成员函数的指针的语法包括成员函数所属的类:

 void (Game::*mptr)();

这定义了一个名为 mptr 的指向成员函数的指针,它包含一个指向 Games 类的成员函数的指针,它不接受任何参数并且不返回任何内容。与普通函数指针对比:

 void (*ptr)();

这定义了一个名为 ptr 的指向函数的指针,它包含一个指向不带参数且不返回任何内容的函数的指针。

原文由 Pete Becker 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题