You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:39:03