如何从另一个类调用指向成员的函数? [复制]

Posted

技术标签:

【中文标题】如何从另一个类调用指向成员的函数? [复制]【英文标题】:How do I call pointer-to-member functions from another class? [duplicate] 【发布时间】:2018-03-09 22:21:08 【问题描述】:

我有两个班级,ButtonGame。 Game 类包含 Button* 类型的成员,而 Button 类包含指向 Game 类中成员函数的指针。

class Game
    public:
        Button* button1;

        void init();
        void tick();

        void wantetEvent();
;

class Button
    public:
        void (Game::*click)();
;

我现在在Game的init函数中定义click函数指针。

void Game::init()
    button1 = new Button;
    button1->click = &Game::wantetEvent;

tick函数中我想调用button1click函数。到目前为止,这是我尝试过的:

void Game::tick()
    (button1->*click)();
    (button1->*Game::click)();

我尝试了许多其他方法,但它们的前景不如这些示例。 问题是编译器告诉我第一个示例中的'click' was not declared in this scope 和第二个示例中的'click' is not a member of 'Game'。从指针的角度来看,我试图访问另一个类中的函数是否存在问题?还是有一些解决方案可以让我以这种方式调用函数?

【问题讨论】:

似乎 (button1->*click)() 必须工作。我在这里看了例子。 en.cppreference.com/w/cpp/language/… 应该是(this->*(button1->click))()(button1->*click)() 仅在 clickGame::init 范围内的名称时才有意义,但不是。 提示:“来自另一个班级”与您的问题完全无关。 @АндрейМоскаленко 只是它没有 【参考方案1】:

你需要一个实例来调用它:

void Game::tick()
    (this->*(button1->click))();

Demo

【讨论】:

你能补充一些关于原因的文字吗?意思是,click 不在范围内?

以上是关于如何从另一个类调用指向成员的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥指向基类的派生类指针可以调用派生类成员函数? [复制]

指向模板类成员函数的函数指针

使用线程从另一个成员函数调用一个成员函数

c++ 虚函数 如何调父类 而非子类

如何声明一个带有指向成员函数的函数

如何从静态成员函数调用指向成员函数的指针?