【问题标题】: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 范围内的名称时才有意义,但不是。
  • 提示:“来自另一个班级”与您的问题完全无关。
  • @АндрейМоскаленко 只是它没有

标签: c++ class function-pointers member-function-pointers


【解决方案1】:

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

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

Demo

【讨论】:

  • 你能补充一些关于原因的文字吗?意思是,click 不在范围内?
猜你喜欢
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多