2011-04-18 85 views
4

我在使用過量DisplayFunction中的對象時遇到了問題。將對象用於Glut顯示功能

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聲明爲靜態成員,但是這不會允許我使用凸輪對象,任何想法?

Thx !!!

回答

0

在C++中,static方法使用的數據成員和方法也必須聲明爲static。最簡單的方法是聲明Camstatic

您還可以有靜態初始化它,那就是,在實現文件:

Modelisation::Camera* Cam = new Camera(); 

(需要注意的是,這取決於怎麼回事Cam時,你可能會打開自己的static initialization fiasco。 )

+0

我很抱歉問,但我如何在頭文件中聲明一個靜態對象Cam? – Athanase 2011-04-18 22:10:59

+0

你在頭文件中聲明它爲'Static Camera * Cam'。 – Adrian 2011-04-18 22:24:21

+0

對不起,我犯了一個錯誤,這完美的作品。當我在這個論壇上提問時,我總能得到完美的回答。謝謝 !! – Athanase 2011-04-18 22:30:24

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(); 
}; 

,也將努力

+0

謝謝,但這是行不通的,因爲我的對象凸輪不是靜態的。 – Athanase 2011-04-18 22:10:16

+1

你必須傳遞一個函數指針到glutDisplayFunc - 沒有辦法繞過它 – 2011-04-18 22:19:53

0

你正在嘗試做的基本上是使用非靜態成員函數作爲一個C回調,這是荒謬的硬盤之一C++的一部分。

一個很好的概述爲什麼這在C++中不能輕鬆工作03在this StackOverflow question和示例中給出瞭解決方法。