Problem mit main Datei



  • Hallo zusammen,

    ich habe probiert mal ein OpenGl "Fenster" zu programmieren und habe dabei, dass oop Konzept anwenden wollen, leider ist es fehlgeschlagen und ich weiss nicht was ich machen soll. Ich habe ein paar Fehlermeldungen bekommen, weiss aber nicht genau, was sie bedeuten oder wie ich etwas verändern kann.
    Es sind insgesamt 4 Dateien:

    1. main.cpp:

    #include "stdafx.h"
    #include "opengl_init.h"
    
    int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR IpCmdLine, int iCmdShow){ 
    
        OpenGl_Init OpenGL_Start;
        if ( !OpenGL_Start.screen_setup( hInst, iCmdShow, 1280, 720 ) ) {
             MessageBox( 0, "Funktion: screen_setup() ist fehlgeschlagen!", "Error!", MB_OK |MB_ICONERROR );     
             return 0;     
        }
        OpenGL_Start.opengl_setup();
    
        while ( true ) {
              if( OpenGL_Start.key_pressed() ) {
                  break;
              }
    
        }
        return 0;
    }
    

    2. OpenGL Initialisierung:

    #include "stdafx.h"
    #include "opengl_init.h"
    
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {
    
            switch( msg ) {
               case WM_DESTROY:
                    PostQuitMessage(0);
                    break;
               default:
                    return DefWindowProc( hWnd, msg, wParam, lParam );
                    break;
            }
    
    unsigned char OpenGl_Init::key_pressed() {
             if( PeekMessage( &msg, hWnd, 0, 0, PM_REMOVE ) ) {
                 if( msg.message == WM_QUIT || msg.message == WM_KEYDOWN ) {
                     return true;
                 }
                 TranslateMessage( &msg );
                 DispatchMessage(  &msg );
             } 
             return 0;        
    }
    
    void OpenGl_Init::opengl_setup(){
    
         memset( &pfd, 0, sizeof( pfd ) );
         pfd.nSize                = sizeof( PIXELFORMATDESCRIPTOR );
         pfd.nVersion             = 1;
         pfd.dwFlags              = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
         pfd.iPixelType           = PFD_TYPE_RGBA;
         pfd.cColorBits           = 32;
         pfd.cDepthBits           = 32;
         pfd.cAlphaBits           = 8;
    }
    
    bool OpenGl_Init::screen_setup( HINSTANCE hInst, int iCmdShow, int iWidth, int iHeight ) {
    
        this->iWidth  = iWidth;
        this->iHeight = iHeight;
    
        char szClassName[]   = "MyWndClassEx";
        char szWindowTitle[] = "OpenGL Spiel";
    
        WndClassEx.cbSize           = sizeof( WNDCLASSEX );
        WndClassEx.style            = 0;
        WndClassEx.cbClsExtra       = 0;
        WndClassEx.cbWndExtra       = 0;
        WndClassEx.hInstance        = hInst;
    
        WndClassEx.hIcon            = LoadIcon ( hInst, IDI_APPLICATION );
        WndClassEx.hCursor          = LoadCursor ( hInst, IDC_ARROW );
        WndClassEx.hIconSm          = 0;    
        WndClassEx.hbrBackground    = ( HBRUSH ) GetStockObject ( BLACK_BRUSH );
    
        WndClassEx.lpfnWndProc      = WndProc;
        WndClassEx.lpszMenuName     = 0;
        WndClassEx.lpszClassName    = szClassName;
    
        if( !RegisterClassEx( &WndClassEx ) ) {
            MessageBox( NULL, "Fail to register WndClassEx!",
                        "Error", MB_OK | MB_ICONERROR );
            return false;
        }
    
        hWnd = CreateWindow( szClassName, szWindowTitle,
                             WS_OVERLAPPEDWINDOW | WS_VISIBLE,            
                             CW_USEDEFAULT, CW_USEDEFAULT,                    
                             iWidth, iHeight, 0, 0, hInst, 0 );
    
        if ( !hWnd ) {
             MessageBox( 0, "Failed to create Window!", "Error",
                         MB_OK | MB_ICONERROR );
             return false;
        }
    
        ShowWindow( hWnd, iCmdShow );
        UpdateWindow( hWnd );    
    }
    

    3. OpenGL Initialisierung Header Datei:

    class OpenGl_Init {
    
          private:
              HWND                          hWnd;                /* Für das Handle dieses Fensters */
              WNDCLASSEX                    WndClassEx;          /* Datenstruktur für die windowclass */ 
              MSG                           msg;
              /*OPENGL*/
              HDC                           hDc;                 //Gerät Kontext
              HGLRC                         hGLRC;     
              PIXELFORMATDESCRIPTOR         pfd;
              int                           iFormat;
              int                           iWidth;
              int                           iHeight;  
          public:
              unsigned char key_pressed();
              void opengl_setup();
              bool screen_setup( HINSTANCE hInst, int iCmdShow, int iWidth, int iHeight );
    
    }
    

    4. stdafx.cpp:

    /*---INCLUDES---*/
    #include <windows.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    
    /*---PRAGMAS---*/
    #pragma comment( lib, "opengl.lib" )
    #pragma comment( lib, "glu.lib" ) 
    #pragma comment( lib, "glut32.lib" )
    

    5. Fehlermeldungen:

    4 N:\C++\Projekte\OpenGL Spiel\main.cpp new types may not be defined in a return type

    4 N:\C++\Projekte\OpenGL Spiel\main.cpp extraneous `int' ignored

    N:\C++\Projekte\OpenGL Spiel\main.cpp In function `OpenGl_Init WinMain(HINSTANCE__, HINSTANCE__, CHAR*, int)':

    4 N:\C++\Projekte\OpenGL Spiel\main.cpp new declaration `OpenGl_Init WinMain(HINSTANCE__, HINSTANCE__, CHAR*, int)'

    1040 H:\Program Files (x86)\Dev-Cpp\include\winbase.h ambiguates old declaration `int WinMain(HINSTANCE__, HINSTANCE__, CHAR*, int)'

    N:\C++\Projekte\OpenGL Spiel\main.cpp In function `OpenGl_Init WinMain(HINSTANCE__, HINSTANCE__, CHAR*, int)':

    9 N:\C++\Projekte\OpenGL Spiel\main.cpp conversion from `int' to non-scalar type `OpenGl_Init' requested

    20 N:\C++\Projekte\OpenGL Spiel\main.cpp conversion from `int' to non-scalar type `OpenGl_Init' requested

    20 N:\C++\Projekte\OpenGL Spiel\main.cpp *** [main.o] Error 1

    ICh benutze das Programm Dev-C++.

    Ich hoffe mir kann jemand helfen.

    Freundliche Grüße
    Kukan



    1. Klassen müssen mit einem Semikolon abgeschlossen werden. Wenn du das vergisst führt das zu den kuriosesten Fehlern 😉

    2. Bei deiner "WndProc" fehlt eine schließende geschweifte Klammer.

    Oft (oder zumindest bei mir) liegen solche vergleichsweise seltenen, "komischen" Fehler fast immer an einer falschen Klammer oder einem Semikolon im Header. 😉



  • schau dir diesen Beispiel an: http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=27219
    in diesem Beispiel wird gezeigt wie man OpenGL initialisiert.



  • Bitte höre auf FlameDev zu schauen.
    Der bringt dir nur schlechten Stil bei.



  • Ok ich gucke ihn nicht mehr.
    Aber kennst du ein besseres Tutorial (Video)??? Hab sonst keine gefunden 😕
    Ich schaue mir mal den Link an...



  • Und danke DarkShadow44 hat jetzt geklappt (:


Log in to reply