【发布时间】:2021-12-10 20:07:54
【问题描述】:
正如您在我的代码中看到的那样,我正在尝试为从另一个类调用函数的按钮创建一个 onClick 事件(我正在尝试创建我的自定义按钮类而不是使用 win32 默认用于测试)。
但即使这不会引发任何错误,它也不会调用给定的方法。
这是 Button.hpp
中的函数签名void onClick(POINT pt, void (ButtonsHandler::*clicked)(void));
这是Button.cpp 内部的实现(使用clicked() throws C++ 表达式前面的明显调用的括号必须具有指向函数类型)
void Button::onClick(POINT pt, void (ButtonsHandler::*clicked)(void))
{
if (PtInRect(&textRect, pt) != 0)
{
clicked;
}
}
这就是我真正称呼它的地方
mainMenu.getPlay().onClick(pt, &ButtonsHandler::onPlay);
编辑:解决了谢谢大家 我只是没有创建一个 ButtonsHandler 对象来执行非静态函数 这是我遗漏的正确代码。
void Button::onClick(POINT pt, void (ButtonsHandler::*clicked)(void)) {
if (PtInRect(&textRect, pt) != 0) {
ButtonsHandler bh;
(bh.*clicked)();
}
}
【问题讨论】:
-
clicked;是一个有效的表达式,但它不调用任何东西(假设您打算这样做)。clicked();怎么样? -
this 指针怎么样?如果调用类方法,则必须将指针传递给类。你在哪里尝试这样做?
-
@JeJo 是的。缺少指向
ButtonsHandler的实例指针(或其与Button的未知关系)是另一个从公开信息中不清楚的问题。但是,无论如何:没有括号 - 没有电话。 ;-)(我假设添加括号可能会导致一个新的错误导致正确的方向)
标签: c++ oop winapi member-function-pointers function-call