我有一个MouseController类。有一种方法 - 更新。
void MouseController::update(int x, int y) {
this->mX = x;
this->mY = y;
this->diffX = mX - 650;
this->diffY = mY - 350;
calculateAngle();
}
我正在使用过剩。我想制作glutPassiveMotionFunc并放置更新功能。
glutPassiveMotionFunc(mouse.update);
我收到以下错误:
D:\ projects \ cpp \ _过剩\ main.cpp | 129 |错误:请求成员'更新' 在'mouse'中,它是非类型的'MouseController()'
答案 0 :(得分:1)
将mouse
定义为
MouseController mouse();
你定义一个不带参数的函数,返回MouseController
,称为mouse
。然后,当你打电话
glutPassiveMotionFunc(mouse.update);
您尝试访问函数update
的成员mouse
。因此错误信息。
MouseController mouse;
(只有在MouseController::update(int,int)
静止的情况下才有效,但事实并非如此。)
MouseController mouse;
glutPassiveMotionFunc([&](int x, int y){mouse.update(x, y)});
答案 1 :(得分:0)
以下是glutPassiveMotionFunc
void glutPassiveMotionFunc(void (*func)(int x, int y));
正如您所看到的,它接受一个带有两个整数作为参数的函数指针。在C ++中,您无法获得指向非静态成员函数的指针,因为非静态成员函数具有implict第一个参数this
,该参数对于类的每个实例都是唯一的。
你可以尝试在MouseController中存储一个指向更新函数的函数指针,然后将其传递给glutPassiveMotionFunc
这将为您提供一种获取指向函数的指针,但仍然不匹配需要传递给glutPassiveMotionFunc
的函数指针的签名。看看另一个响应者的解决方案,让lambda做到这一点。