FLTK 按钮回调给 c3867
FLTK button callback gives c3867
我试图用我以前尝试过的方法将一个函数分配给一个按钮,这个方法以前也有效,但出于某种原因,我现在从我的编译器中得到这个:
error C3867: 'WindowReq::calc_cb': non-standard syntax; use '&' to
create a pointer to member
代码如下:
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);
您不能像这样调用实例化方法。
该函数必须 而不是 依赖于 class.
的实例
所以,基本上你有多种选择如何解决这个问题,但由于你将 this
作为第二个参数传递,我猜你只是忘记了 [=13] 之前的 static
关键字=]的声明。
那么调用应该如下所示:
Calc->callback(&WindowReq::calc_cb, this);
其他方法包括使用模板化回调或 C++11 的 lambda 表达式,它们可以直接在实例化 class 中调用方法。可能还有更多方法可以实现。
我试图用我以前尝试过的方法将一个函数分配给一个按钮,这个方法以前也有效,但出于某种原因,我现在从我的编译器中得到这个:
error C3867: 'WindowReq::calc_cb': non-standard syntax; use '&' to create a pointer to member
代码如下:
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);
您不能像这样调用实例化方法。
该函数必须 而不是 依赖于 class.
所以,基本上你有多种选择如何解决这个问题,但由于你将 this
作为第二个参数传递,我猜你只是忘记了 [=13] 之前的 static
关键字=]的声明。
那么调用应该如下所示:
Calc->callback(&WindowReq::calc_cb, this);
其他方法包括使用模板化回调或 C++11 的 lambda 表达式,它们可以直接在实例化 class 中调用方法。可能还有更多方法可以实现。