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:
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
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
- #include <windows.h>
- #include "cCube.h"
- static void Key(unsigned char key, int x, int y);
- static void SpecialKey(int key, int x, int y);
- cCube cube;
- int main(int argc, char **argv)
- {
- glutInit(&argc, argv);
- // Ausgabefenster definieren
- glutInitWindowPosition(0, 0);
- glutInitWindowSize( 400, 640);
- // Renderkontext mit Z-Buffer, Doublebuffer fuer RGB-Modus anfordern.
- glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE);
- if (glutCreateWindow("Sample1") == GL_FALSE)
- {
- exit(1);
- }
- cube.Init();
- // Callback Funktionen vereinbaren
- // glutReshapeFunc(cube.Reshape);
- glutKeyboardFunc(Key);
- glutSpecialFunc(SpecialKey);
- glutDisplayFunc(cube.Display);
- // Kontrolle an GLUT Eventloop uebergeben
- glutMainLoop();
- return 0;
- }
- static void Key(unsigned char key, int x, int y)
- {
- if (key==27)
- exit(1);
- if (key==' ')
- {
- if (cube.polygonMode==GL_FILL)
- cube.polygonMode=GL_LINE;
- else
- cube.polygonMode=GL_FILL;
- // Polygondarstellung zw. Outline und Gefuellt umschalten...
- glPolygonMode (GL_FRONT_AND_BACK, cube.polygonMode);
- // ... und Bild erneut rendern
- glutPostRedisplay ();
- }
- }
- static void SpecialKey(int key, int x, int y)
- {
- switch (key)
- {
- case GLUT_KEY_UP: cube.rotX -= 5;
- break;
- case GLUT_KEY_DOWN: cube.rotX += 5;
- break;
- case GLUT_KEY_LEFT: cube.rotZ -= 5;
- break;
- case GLUT_KEY_RIGHT :cube.rotZ += 5;
- break;
- default:
- return;
- }
- glutPostRedisplay();
- }
- [/code]
- Hier die cTest.h:
- [code]
- #include <GL/glut.h>
- class cCube
- {
- private:
- public:
- cCube(){}
- ~cCube(){}
- GLenum polygonMode;
- float rotX, rotY , rotZ;
- void Init();
- static void DrawCube ();
- static void Display ();
- static void Reshape (int , int);
- };
- void cCube::DrawCube ()
- {
- glBegin(GL_QUADS);
- glColor3d(0.0 ,1.0 ,0.0); // GRÜN
- glVertex3d( 0.0 , 0.0, 0.0); // Oben rechts (OBEN)
- glVertex3d( 0.0 , 0.0, -1.0); // Oben links (OBEN)
- glVertex3d( 0.5 , 0.0, -1.0); // Unten links (OBEN)
- glVertex3d( 0.5 , 0.0, 0.0); // Unten rechts (OBEN)
- glColor3d(1.0 ,0.5 ,0.0 ); // ORANGE
- glVertex3d( 0.0 , -1.0 , 0.0 ); // Oben rechts (UNTEN)
- glVertex3d( 0.0 , -1.0 , -1.0 ); // Oben links (UNTEN)
- glVertex3d( 0.5 , -1.0 , -1.0 ); // Unten links (UNTEN)
- glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten rechts (UNTEN)
- glColor3d(1.0 ,0.0 ,0.0 ); // ROT
- glVertex3d( 0.0 , 0.0 , 0.0 ); // Oben rechts (VORNE)
- glVertex3d( 0.5 , 0.0 , 0.0 ); // Oben links (VORNE)
- glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten links (VORNE)
- glVertex3d( 0.0 , -1.0 , 0.0 ); // Unten rechts (VORNE)
- glColor3d(1.0 ,1.0 ,0.0 ); // GELB
- glVertex3d( 0.0 , 0.0 , -1.0 ); // Unten links (HINTEN)
- glVertex3d( 0.5 , 0.0 , -1.0 ); // Unten rechts (HINTEN)
- glVertex3d( 0.5 , -1.0 , -1.0 ); // Oben rechts (HINTEN)
- glVertex3d( 0.0 , -1.0 , -1.0 ); // Oben links (HINTEN)
- glColor3d(0.0 ,0.0 ,1.0 ); // BLAU
- glVertex3d( 0.0 , 0.0 , 0.0 ); // Oben rechts (LINKS)
- glVertex3d( 0.0 , 0.0 , -1.0 ); // Oben links (LINKS)
- glVertex3d( 0.0 , -1.0 , -1.0 ); // Unten links (LINKS)
- glVertex3d( 0.0 , -1.0 , 0.0 ); // Unten rechts (LINKS)
- glColor3d(1.0 ,0.0 ,1.0 ); // VIOLETT
- glVertex3d( 0.5 , 0.0 , 0.0 ); // Oben rechts (RECHTS)
- glVertex3d( 0.5 , 0.0 , -1.0 ); // Oben links (RECHTS)
- glVertex3d( 0.5 , -1.0 , -1.0 ); // Unten links (RECHTS)
- glVertex3d( 0.5 , -1.0 , 0.0 ); // Unten rechts (RECHTS)
- glEnd ();
- }
- void cCube::Init()
- {
- // Z-Buffer f. Berechnung verdeckter Flaechen einschalten
- glEnable(GL_DEPTH_TEST);
- // Vorder- u. Rueckseite der Polygone nur als Randlinien darstellen
- glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
- }
- void cCube::Reshape(int width, int height)
- {
- // Darstellung auf gesamten Clientbereich des Fensters zulassen
- glViewport(0, 0, (GLint)width, (GLint)height);
- // Projektionsmatix initialisieren auf 60 Grad horizontales
- // Sichtfeld, Verhaeltnis Breite:Hoehe = 1:1, Clipping fuer z<1
- // und z>200 */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- // angle, aspect, near Clip, far Clip */
- gluPerspective(60.0, 1.0, 1.0, 200.0);
- // Modelview Matrix wieder zur aktuellen Matrix machen
- glMatrixMode(GL_MODELVIEW);
- }
- void cCube::Display(void)
- {
- // FrameBuffer unf Z-Buffer loeschen */
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- // Modelview Matrix initialisieren */
- glLoadIdentity ();
- // Modeltransformation ausfuehren...
- glTranslatef (0.0, 0.0 ,-5.0); // Verschiebung um -3 in z-Richtung
- glRotatef (rotY, 0.0, 1.0, 0.0); // Rotation um die Y-Achse
- glRotatef (rotX, 1.0, 0.0, 0.0); // Rotation um die X-Achse
- glRotatef (rotZ, 0.0, 0.0, 1.0); // Rotation um die Z-Achse
- glTranslatef (-0.5, -0.5 , -0.5); // Verschieb. um -0.5, alle Richt.
- glScalef(1.0 , 1.0, 1.0);
- // ...und den Wuerfel unter der Modeltransformation zeichnen.
- DrawCube ();
- // Back-Buffer in den Front-Buffer kopieren.
- glutSwapBuffers();
- }
...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