我正在使用计时器函数进行动画处理,但是将其放在Renderer类中时遇到问题。
void Renderer::animate(int value)
{
glutTimerFunc(TIMERMSECS, animate, 0);
}
错误:
\ renderer.cpp(242):错误C3867:'Renderer::animate':函数调用缺少参数列表;使用'&Renderer::animate'创建一个指向成员的指针
最佳答案
问题在于Renderer::animate
是类成员函数,因此具有隐藏的this
参数。 glutTimerFunc
不知道要传递什么this
值,因此,如果您以某种讨厌的方式试图越过编译器,它将在运行时崩溃。
解决方案是将Renderer::animate
更改为静态方法或普通的全局函数。然后,您需要将指向Renderer
实例的指针存储在全局变量中,例如:
class Renderer
{
static void staticAnimate(int value);
void animate(int value);
...
};
Renderer *gRenderer = ...;
void Renderer::staticAnimate(int value)
{
gRenderer->animate(value);
}
...
glutTimerFunc(TIMERMSECS, &Renderer::staticAnimate, 0);
如果是
sizeof(void*) <= sizeof(int)
(在32位系统上为true,但在64位系统上为true),则还可以通过value
参数传递实例;但是,由于这不是可移植的,并且您永远不需要同时在多个不同的实例上调用glutTimerFunc
,因此您不必担心为此使用全局变量。关于c++ - glutTimerFunc问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3939509/