我在使用过量显示功能中的对象时遇到问题。
class Modelisation
{
private:
int hauteur, largeur, x, y;
Camera *Cam;
void DisplayFunction ();
static void RedisplayFunction (int, int);
public:
Modelisation (int argc, char **argv, char[]);
~Modelisation ();
void StartMainLoop();
};
Modelisation.cpp
Modelisation::Modelisation (int argc, char **argv, char windowName [])
{
Cam = new Camera;
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE);
glutCreateWindow (windowName);
};
void Modelisation::StartMainLoop()
{
glutDisplayFunc(DisplayFunction);
glutIdleFunc(DisplayFunction);
glutReshapeFunc(RedisplayFunction);
glutMainLoop();
}
void Modelisation::DisplayFunction()
{
glClearDepth (1);
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();
Cam->Render ();
glFlush ();
glutSwapBuffers ();
}
glutDisplayFunc(DisplayFunction); glutIdleFunc(DisplayFunction);
这不起作用。 我知道我可以将DisplayFunction声明为静态成员,但这不允许我使用Cam对象,任何想法?
Thx !!!
答案 0 :(得分:0)
在C ++中,static
方法使用的数据成员和方法也必须声明为static
。最简单的方法是将Cam
声明为static
。
您还必须静态初始化它,即在您的实现文件中:
Modelisation::Camera* Cam = new Camera();
(请注意,根据Cam
的使用方式,您可能会打开static initialization fiasco。
答案 1 :(得分:0)
你不能这样做,因为你的void DisplayFunction ();
不是静态的,而glutDisplayFunc需要一个函数指针。将您的Modelisation类更改为:
class Modelisation
{
private:
int hauteur, largeur, x, y;
Camera *Cam;
static void DisplayFunction ();
static void RedisplayFunction (int, int);
public:
Modelisation (int argc, char **argv, char[]);
~Modelisation ();
void StartMainLoop();
};
它会起作用
答案 2 :(得分:0)
你要做的主要是使用非静态成员函数作为C回调,这是C ++的一个荒谬的难点部分。
很好地概述了为什么这在C ++ 03中不起作用的原因在this StackOverflow question和示例中给出了解决方法。