C++传入类方法函数指针作为按钮onClick参数无法触发如何解决
C++ 类成员函数指针作为回调触发失败问题
问题背景
我正在开发自定义按钮类,测试阶段不使用Win32原生按钮,需要实现按钮的onClick点击事件来调用另一ButtonsHandler类中的方法。目前代码运行无报错,但目标方法始终无法触发。
相关代码
Button.hpp 函数签名
void onClick(POINT pt, void (ButtonsHandler::*clicked)(void));
Button.cpp 原错误实现
直接调用clicked()会抛出错误:C++ expression preceding parentheses of apparent call must have pointer-to function type
void Button::onClick(POINT pt, void (ButtonsHandler::*clicked)(void)) { if (PtInRect(&textRect, pt) != 0) { clicked; } }
实际调用代码
mainMenu.getPlay().onClick(pt, &ButtonsHandler::onPlay);
解决方案
问题原因
非静态成员函数的调用必须绑定对应的类实例,单独调用成员函数指针缺少执行上下文,因此无法正常触发。
修正后代码
void Button::onClick(POINT pt, void (ButtonsHandler::*clicked)(void)) { if (PtInRect(&textRect, pt) != 0) { ButtonsHandler bh; (bh.*clicked)(); } }
内容的提问来源于stack exchange,提问作者Alessandro Delorenzi
相关产品推荐
相关产品推荐

