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 中调用方法。可能还有更多方法可以实现。