Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » Fehler in kleinem Glut Code !

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.09.2006, 19:50 Uhr
WindDancer1



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:


C++:
#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();
}





Hier der Code in der cTest.h:


C++:
#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 Fehler:


Code:
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)



Hoffe Ihr könnt mir helfen,
vielen Dank vorab WD


Dieser Post wurde am 28.09.2006 um 22:30 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.09.2006, 22:32 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du hast die memberfunktion statisch gemacht - rotx und co sind aber nicht statisch - ganz einfach. das sagt doch die fehlermeldung.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.10.2006, 20:18 Uhr
~Merit
Gast


Ich bin auf der Suche wegen einem ähnlichen Problem auf diesen Thread gestoßen.

Wenn ich jetzt Memberfunktionen nicht statisch mache, dann bekomme ich folgenden Fehler:


Code:

Kompilierung läuft...
Cube.cpp
e:\eigene dateien\eigene texte\diplomarbeit\programme\test-programme\cube\cube.cpp(33) : error C2664: 'glutDisplayFunc' : Konvertierung des Parameters 1 von 'void (void)' in 'void (__cdecl *)(void)' nicht moeglich
        Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein
Fehler beim Ausführen von cl.exe.

Cube.obj - 1 Fehler, 0 Warnung(en)


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: