FLTK按钮回调给出了c3867

时间:2015-12-22 17:44:42

标签: c++ fltk

我试图使用我之前尝试过的方法将一个函数分配给一个按钮,之前也有效,但出于某种原因我现在从编译器中得到这个:

  

错误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);

1 个答案:

答案 0 :(得分:0)

你不能这样调用instanced方法。
该函数必须依赖于类的实例。

所以,基本上你有多种方法可以解决这个问题,但是因为你传递this作为第二个参数,我猜你在static之前忘记了calc_cb关键字宣言。

然后呼叫应该如下:

Calc->callback(&WindowReq::calc_cb, this);

其他方法包括使用模板化回调或C ++ 11的lambdas,它们可以直接在实例类中调用该方法。可能还有更多方法可以实现这一目标。