FLTK按钮回调给出c3867
FLTK button callback gives c3867
我试图用一个我以前尝试过的方法将函数分配给一个按钮,这个方法以前也有效,但由于某种原因,我现在从编译器那里得到了这个:
错误C3867:"WindowReq::calc_cb":非标准语法;使用"&"到创建指向成员的指针
这是代码:
class WindowReq : public Fl_Window
{
public:
WindowReq(int W, int H, const char* Title);
Fl_Input* InVel;
Fl_Input* InDeg;
Fl_Button* Calc;
private:
void calc_cb(Fl_Widget* o, void* v);
};
WindowReq::WindowReq(int W, int H, const char* Title) : Fl_Window(W, H, Title)
{
begin();
Calc = new Fl_Button((WINSIZE - 150), 50, 100, 30, "Calculate path");
Calc->callback(calc_cb, this);
InVel = new Fl_Input(70, 50, 100, 30, "Velocity:");
InDeg = new Fl_Input(((WINSIZE / 3) + 50), 50, 100, 30, "Angle:");
end();
show();
}
我不知道问题出在哪里,如果有任何帮助,我们将不胜感激。
编辑:这是根据VisualStudio:导致错误的行
Calc->callback(calc_cb, this);
不能像这样调用实例化方法
函数必须而不是依赖于类的实例。
因此,基本上您有多种选择来绕过这一点,但由于您将this
作为第二个参数传递,我想您只是忘记了calc_cb
声明之前的static
关键字。
然后通话应该看起来像:
Calc->callback(&WindowReq::calc_cb, this);
其他方法包括使用模板化回调或C++11的lambda,它们可以直接在实例化类中调用方法。可能还有更多的方法可以实现这一点
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- 如何使用 Node-addon-API 实现 node-nan 回调
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 访问类C++ C 样式回调
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 在C++中实现回调
- FLTK按钮回调给出c3867