我试图使用我之前尝试过的方法将一个函数分配给一个按钮,之前也有效,但出于某种原因我现在从编译器中得到这个:
错误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);
答案 0 :(得分:0)
你不能这样调用instanced方法。
该函数必须不依赖于类的实例。
所以,基本上你有多种方法可以解决这个问题,但是因为你传递this
作为第二个参数,我猜你在static
之前忘记了calc_cb
关键字宣言。
然后呼叫应该如下:
Calc->callback(&WindowReq::calc_cb, this);
其他方法包括使用模板化回调或C ++ 11的lambdas,它们可以直接在实例类中调用该方法。可能还有更多方法可以实现这一目标。