我正在使用计时器函数来制作动画,但是当我将其放置在 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);
If sizeof(void*) <= sizeof(int)
(在 32 位系统上是这样,但在 64 位系统上不是这样),那么您还可以通过value
范围;但是,由于这不可移植,您不需要调用glutTimerFunc
同时在多个不同的实例上,您不必担心为此使用全局变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)