如何从另一个类调用指向成员的函数? [复制]
Posted
技术标签:
【中文标题】如何从另一个类调用指向成员的函数? [复制]【英文标题】:How do I call pointer-to-member functions from another class? [duplicate] 【发布时间】:2018-03-09 22:21:08 【问题描述】:我有两个班级,Button
和 Game
。
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
函数中我想调用button1
的click
函数。到目前为止,这是我尝试过的:
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)()
仅在 click
是 Game::init
范围内的名称时才有意义,但不是。
提示:“来自另一个班级”与您的问题完全无关。
@АндрейМоскаленко 只是它没有
【参考方案1】:
你需要一个实例来调用它:
void Game::tick()
(this->*(button1->click))();
Demo
【讨论】:
你能补充一些关于原因的文字吗?意思是,click
不在范围内?以上是关于如何从另一个类调用指向成员的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章