我想将主要源文件中的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();
...
}
我不明白这个问题而且我不知道该怎么做。我将布尔值和其他一些变量声明为静态,但却出现了一堆未解决的外部符号错误。
答案 0 :(得分:1)
我不明白这个问题
您需要了解静态成员函数是什么。例如,请参阅this tutorial。我还推荐前一个关于静态成员变量的文章。
简而言之,静态成员函数对类的实例一无所知。非静态成员变量绑定到类的实例。因此,静态成员函数无法使用非静态成员变量。
我不知道该怎么做。
你应该做什么取决于你的课程及其功能应该做什么。
C回调不能是成员函数。因此,它们不能依赖于实例的状态(全局实例除外,请参阅this tutorial)