Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何让GLUTIMERFUNCT调用子类函数_C++_Opengl_Inheritance - Fatal编程技术网

C++ 如何让GLUTIMERFUNCT调用子类函数

C++ 如何让GLUTIMERFUNCT调用子类函数,c++,opengl,inheritance,C++,Opengl,Inheritance,因此,我正在尝试制作一个项目,以反映Ruby的GosuGem,一个2d图形插件。为此,我创建了一个名为Window的类,该类将从Game:public Window类继承,然后定义了它的三个函数:更新控件和绘制 为了在我的窗口类中实现这一点,我定义了一个函数Show,如下所示 void Window::Show(){ // stuff to initialize and set up my window and controls glutT

因此,我正在尝试制作一个项目,以反映Ruby的GosuGem,一个2d图形插件。为此,我创建了一个名为Window的类,该类将从Game:public Window类继承,然后定义了它的三个函数:更新控件和绘制

为了在我的窗口类中实现这一点,我定义了一个函数Show,如下所示

    void Window::Show(){
            // stuff to initialize and set up my window and controls
            glutTimerFunc(100,real_update,fps); 
    }
我真正的更新函数是

    void Window::real_update(int v){
            glutPostRedisplay();
            Update();
            glutTimerFunc(1000/fps,real_update,v);
    }
这里的逻辑是,任何继承Window的类都能够调用Show,它将设置回调循环并初始化窗口,然后在real_update循环中,它将调用将在子类中定义的更新

但是,当我创建一个简单的子类时,在子类中定义Update以指示正在调用它,然后在子类的实例上调用Show,它将只调用基类的窗口定义进行更新


我肯定这是对继承的误解,但我不明白为什么。我认为Show的子类调用将调用基类的定义,然后基类的定义将调用Update,自从子类重新定义它以来,Update已被更改

这个问题的答案在这个帖子中找到了


本质上,您希望有类似虚拟的行为,但因为我想调用glut函数,所以它必须是静态的,所以您可以对类进行模板化,并让它调用模板类更新函数。

什么是类声明?我的类声明是类窗口和类游戏:公共窗口。这就是为什么我希望更新包含在游戏中编写的代码,函数real_Update将由游戏继承,并在使用int-glutTimerFunct时调用Update。