gpt4 book ai didi

c++ - glutTimerFunc 问题

转载 作者:行者123 更新时间:2023-11-30 03:09:38 25 4
gpt4 key购买 nike

我正在使用定时器函数来制作动画,但是当我将它放在 Renderer 类中时我遇到了问题。

void Renderer::animate(int value)
{
glutTimerFunc(TIMERMSECS, animate, 0);
}

错误:\renderer.cpp(242) : error 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 位系统上是正确的,但在 64 位系统上不是正确的),那么你也可以通过 value 传递实例。范围;然而,因为这不是可移植的,你永远不需要调用 glutTimerFunc同时在多个不同的实例上,您不必担心为此使用全局变量。

关于c++ - glutTimerFunc 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com