Statische Member Funktion und Glut

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Statische Member Funktion und Glut

    Hi Leute,

    ich hab hier nen kleinen Glut code , wenn ich den Code aus der Klasse in die cpp mit der main schreibe Klapps, mit Klasse krieg ich aber Fehler, hier mal der Code und die Fehlermeldung :
    code in der cpp:

    Quellcode

    1. #include <windows.h>
    2. #include "cCube.h"
    3. static void Key(unsigned char key, int x, int y);
    4. static void SpecialKey(int key, int x, int y);
    5. cCube cube;
    6. int main(int argc, char **argv)
    7. {
    8. glutInit(&argc, argv);
    9. // Ausgabefenster definieren
    10. glutInitWindowPosition(0, 0);
    11. glutInitWindowSize( 400, 640);
    12. // Renderkontext mit Z-Buffer, Doublebuffer fuer RGB-Modus anfordern.
    13. glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE);
    14. if (glutCreateWindow("Sample1") == GL_FALSE)
    15. {
    16. exit(1);
    17. }
    18. cube.Init();
    19. // Callback Funktionen vereinbaren
    20. // glutReshapeFunc(cube.Reshape);
    21. glutKeyboardFunc(Key);
    22. glutSpecialFunc(SpecialKey);
    23. glutDisplayFunc(cube.Display);
    24. // Kontrolle an GLUT Eventloop uebergeben
    25. glutMainLoop();
    26. return 0;
    27. }
    28. static void Key(unsigned char key, int x, int y)
    29. {
    30. if (key==27)
    31. exit(1);
    32. if (key==' ')
    33. {
    34. if (cube.polygonMode==GL_FILL)
    35. cube.polygonMode=GL_LINE;
    36. else
    37. cube.polygonMode=GL_FILL;
    38. // Polygondarstellung zw. Outline und Gefuellt umschalten...
    39. glPolygonMode (GL_FRONT_AND_BACK, cube.polygonMode);
    40. // ... und Bild erneut rendern
    41. glutPostRedisplay ();
    42. }
    43. }
    44. static void SpecialKey(int key, int x, int y)
    45. {
    46. switch (key)
    47. {
    48. case GLUT_KEY_UP: cube.rotX -= 5;
    49. break;
    50. case GLUT_KEY_DOWN: cube.rotX += 5;
    51. break;
    52. case GLUT_KEY_LEFT: cube.rotZ -= 5;
    53. break;
    54. case GLUT_KEY_RIGHT :cube.rotZ += 5;
    55. break;
    56. default:
    57. return;
    58. }
    59. glutPostRedisplay();
    60. }
    61. [/code]
    62. Hier die cTest.h:
    63. [code]
    64. #include <GL/glut.h>
    65. class cCube
    66. {
    67. private:
    68. public:
    69. cCube(){}
    70. ~cCube(){}
    71. GLenum polygonMode;
    72. float rotX, rotY , rotZ;
    73. void Init();
    74. static void DrawCube ();
    75. static void Display ();
    76. static void Reshape (int , int);
    77. };
    78. void cCube::DrawCube ()
    79. {
    80. glBegin(GL_QUADS);
    81. glColor3d(0.0 ,1.0 ,0.0); // GRÜN
    82. glVertex3d( 0.0 , 0.0, 0.0); // Oben rechts (OBEN)
    83. glVertex3d( 0.0 , 0.0, -1.0); // Oben links (OBEN)
    84. glVertex3d( 0.5 , 0.0, -1.0); // Unten links (OBEN)
    85. glVertex3d( 0.5 , 0.0, 0.0); // Unten rechts (OBEN)
    86. glColor3d(1.0 ,0.5 ,0.0 ); // ORANGE
    87. glVertex3d( 0.0 , -1.0 , 0.0 ); // Oben rechts (UNTEN)
    88. glVertex3d( 0.0 , -1.0 , -1.0 ); // Oben links (UNTEN)
    89. glVertex3d( 0.5 , -1.0 , -1.0 ); // Unten links (UNTEN)
    90. glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten rechts (UNTEN)
    91. glColor3d(1.0 ,0.0 ,0.0 ); // ROT
    92. glVertex3d( 0.0 , 0.0 , 0.0 ); // Oben rechts (VORNE)
    93. glVertex3d( 0.5 , 0.0 , 0.0 ); // Oben links (VORNE)
    94. glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten links (VORNE)
    95. glVertex3d( 0.0 , -1.0 , 0.0 ); // Unten rechts (VORNE)
    96. glColor3d(1.0 ,1.0 ,0.0 ); // GELB
    97. glVertex3d( 0.0 , 0.0 , -1.0 ); // Unten links (HINTEN)
    98. glVertex3d( 0.5 , 0.0 , -1.0 ); // Unten rechts (HINTEN)
    99. glVertex3d( 0.5 , -1.0 , -1.0 ); // Oben rechts (HINTEN)
    100. glVertex3d( 0.0 , -1.0 , -1.0 ); // Oben links (HINTEN)
    101. glColor3d(0.0 ,0.0 ,1.0 ); // BLAU
    102. glVertex3d( 0.0 , 0.0 , 0.0 ); // Oben rechts (LINKS)
    103. glVertex3d( 0.0 , 0.0 , -1.0 ); // Oben links (LINKS)
    104. glVertex3d( 0.0 , -1.0 , -1.0 ); // Unten links (LINKS)
    105. glVertex3d( 0.0 , -1.0 , 0.0 ); // Unten rechts (LINKS)
    106. glColor3d(1.0 ,0.0 ,1.0 ); // VIOLETT
    107. glVertex3d( 0.5 , 0.0 , 0.0 ); // Oben rechts (RECHTS)
    108. glVertex3d( 0.5 , 0.0 , -1.0 ); // Oben links (RECHTS)
    109. glVertex3d( 0.5 , -1.0 , -1.0 ); // Unten links (RECHTS)
    110. glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten rechts (RECHTS)
    111. glEnd ();
    112. }
    113. void cCube::Init()
    114. {
    115. // Z-Buffer f. Berechnung verdeckter Flaechen einschalten
    116. glEnable(GL_DEPTH_TEST);
    117. // Vorder- u. Rueckseite der Polygone nur als Randlinien darstellen
    118. glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
    119. }
    120. void cCube::Reshape(int width, int height)
    121. {
    122. // Darstellung auf gesamten Clientbereich des Fensters zulassen
    123. glViewport(0, 0, (GLint)width, (GLint)height);
    124. // Projektionsmatix initialisieren auf 60 Grad horizontales
    125. // Sichtfeld, Verhaeltnis Breite:Hoehe = 1:1, Clipping fuer z<1
    126. // und z>200 */
    127. glMatrixMode(GL_PROJECTION);
    128. glLoadIdentity();
    129. // angle, aspect, near Clip, far Clip */
    130. gluPerspective(60.0, 1.0, 1.0, 200.0);
    131. // Modelview Matrix wieder zur aktuellen Matrix machen
    132. glMatrixMode(GL_MODELVIEW);
    133. }
    134. void cCube::Display(void)
    135. {
    136. // FrameBuffer unf Z-Buffer loeschen */
    137. glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    138. // Modelview Matrix initialisieren */
    139. glLoadIdentity ();
    140. // Modeltransformation ausfuehren...
    141. glTranslatef (0.0, 0.0 ,-5.0); // Verschiebung um -3 in z-Richtung
    142. glRotatef (rotY, 0.0, 1.0, 0.0); // Rotation um die Y-Achse
    143. glRotatef (rotX, 1.0, 0.0, 0.0); // Rotation um die X-Achse
    144. glRotatef (rotZ, 0.0, 0.0, 1.0); // Rotation um die Z-Achse
    145. glTranslatef (-0.5, -0.5 , -0.5); // Verschieb. um -0.5, alle Richt.
    146. glScalef(1.0 , 1.0, 1.0);
    147. // ...und den Wuerfel unter der Modeltransformation zeichnen.
    148. DrawCube ();
    149. // Back-Buffer in den Front-Buffer kopieren.
    150. glutSwapBuffers();
    151. }
    Alles anzeigen


    ...und hier die Fehlermeldung:


    Kompilierung läuft...
    TestGlut1.cpp
    d:\c++ prg. console 21\--------------- übungen ---------------\cube gfx\cube 2\ccube.h(107) : error C2597: Ungueltige Referenz auf ein Datenelement 'cCube::rotY' in einer statischen Member-Funktion
    d:\c++ prg. console 21\--------------- übungen ---------------\cube gfx\cube 2\ccube.h(108) : error C2597: Ungueltige Referenz auf ein Datenelement 'cCube::rotX' in einer statischen Member-Funktion
    d:\c++ prg. console 21\--------------- übungen ---------------\cube gfx\cube 2\ccube.h(109) : error C2597: Ungueltige Referenz auf ein Datenelement 'cCube::rotZ' in einer statischen Member-Funktion
    Fehler beim Ausführen von cl.exe.

    Glut 1.exe - 3 Fehler, 0 Warnung(en)


    Vielen Dank schon mal vorab

    ShadowEater