有时将函数作为参数发送时出错
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->handleKeys
、this->render
和 this->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)
错误是'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->handleKeys
、this->render
和 this->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)