有时将函数作为参数发送时出错

Error when sending function as argument, sometimes

错误是'GLHandler::handleKeys': non-standard syntax; use '&' to create a pointer to member 四次,不同的功能。

我正在尝试制作一个包装器 class 来初始化过剩,让事情变得更干净。

错误出现在 4 行上都是出于同样的原因,虽然我不确定为什么。

这些都是设置回调

initGlut 函数内部:

glutKeyboardFunc(this->handleKeys); 
glutDisplayFunc(this->render);
glutTimerFunc(1000 / SCREEN_FPS, this->runMainLoop, 0);

runMainLoop 函数内部

glutTimerFunc(1000 / this->SCREEN_FPS, this->runMainLoop, val);

这里抛出的错误 不存在 当从 main 内部以相同方式调用时,这让我相信 class 有问题,但我不能看到了。

this->handleKeysthis->renderthis->runMainLoop 是 class 方法而不是函数。回调必须是函数或静态方法。

例如参见 glutDisplayFunc (and see also freeglut Application Programming Interface):

glutDisplayFunc sets the display callback for the current window.

Usage

void glutDisplayFunc(void (*func)(void));

注意,class的方法只能被class的对象调用。指向 method 的指针是不够的。您可以将 class 的方法想象成一个函数,其中第一个参数是指向 class.

对象的指针

如果有 class

class Foo
{
public:
    void render(void);
};

然后&Foo::render可以得到方法render的指针。但是指针的类型是 void(Foo::*)(void) 而不是 void(*)(void)