【发布时间】:2014-05-05 09:19:55
【问题描述】:
我想将 OpenGL 功能从主源文件转移到一个单独的类中。
// Initialize rendering (GLUT and GLEW)
gfxMgr.init(argc, argv);
...
glutReshapeFunc(gfxMgr.resizeWindow);
glutKeyboardFunc(gfxMgr.keyPressed);
glutKeyboardUpFunc(gfxMgr.keyReleased);
问题始于在类的实现文件中定义回调函数。我在头文件中将它们声明为静态的。
static void init(int , char** );
...
static void drawScene();
static void whenIdle();
然后另一个问题接踵而至。我想在我的实现文件的一个静态函数中使用非静态布尔 fullScreen 变量(如在标题中声明的),但 IDE 告诉我“非静态成员引用必须相对于特定对象” .
void GfxMgr::init(int argc, char** argv)
{
...
if(fullScr) glutFullScreen();
...
}
我不明白这个问题,我不知道该怎么办。我将布尔值和其他一些变量声明为静态变量,但出现了一堆未解决的外部符号错误。
【问题讨论】:
-
如果非
static成员函数未绑定到类的具体对象,则不能调用它。 -
glutFullScreen();也是这个类的静态成员函数吗? -
@40two :好吧,现在我已经将这些函数声明为静态(正如我在 OP 中提到的)。如果不是,我确实使用
gfxMgr.来调用这些函数。 -
@πάνταῥεῖ:不。我没有对 glutFullScreen() 做任何事情,我只是调用了一次。
标签: c++ oop opengl static callback