Ergebnis 1 bis 12 von 12

Thema: C++ - Unerwartetes Dateiende gefunden in zeile 1

  1. #1

    C++ - Unerwartetes Dateiende gefunden in zeile 1

    Hi, ich lern grad Spieleprogrammierung mit C++ und DirectX, hab ein paar interessante Beispiele, wo ich ein "Grundgerüst" genommen hab und nun versuche ein kleines 2D Spiel mit einer Map zu erstellen.
    Angefangen hab ich mal so:
    Code:
    # include <stdio.h>
    # include <windows.h>
    # include <ddraw.h>
    # include <dsound.h>
    # include "ddutil.h"
    # include "dsutil.h"
    # include "resource.h"
    
    class Tile
    {
    public:
        int x;
        int y;
        Tile(){x = 0; y = 0;};
        ~Tile(){}
    };
    
    
    
    const int nettobreite = 640; 
    const int nettohoehe  = 480; 
    const int anzahltiles = 12;
    int bruttobreite;             
    int bruttohoehe;
    int tilehoehe = 32;
    int tilebreite = 128;
    
    int ivy = 0;
    int ivx;
    Tile tilekoord[anzahltiles];
    
    
    HINSTANCE lol_instance;
    HWND lol_window;
    HMENU lol_menu;
    
    
    LRESULT CALLBACK lol_windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
        {
        switch(msg)
            {
        case WM_COMMAND:
            switch( LOWORD( wParam))
                {
            case IDM_EXIT:
                PostMessage( hWnd, WM_CLOSE, 0, 0);
                return 0;
                }
            break;
        case WM_GETMINMAXINFO:
            ((MINMAXINFO *)lParam)->ptMinTrackSize.x = ((MINMAXINFO *)lParam)->ptMaxTrackSize.x = bruttobreite;
            ((MINMAXINFO *)lParam)->ptMinTrackSize.y = ((MINMAXINFO *)lParam)->ptMaxTrackSize.y = bruttohoehe;
            return 0;
        case WM_DESTROY:
            PostQuitMessage( 0);
            return 0;
            }
        return DefWindowProc(hWnd, msg, wParam, lParam);
        }
    
    
    int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow)
        {
            for(ivx = 1; ivx <= anzahltiles; ivx++)
            {
                if (ivx % 8 == 0)
                {
                    ivy++;
                    ivx = 1;
                }
                tilekoord[ivx].x = ivx % 8* 16;
                tilekoord[ivx].y = ivy * 16;
            }
        MSG msg;
        HACCEL acc;
        WNDCLASSEX wcx;
    
        lol_instance = hInst;
    
        wcx.cbSize        = sizeof( wcx);
        wcx.lpszClassName = TEXT( "LOL");
        wcx.lpfnWndProc   = lol_windowhandler;
        wcx.style         = CS_VREDRAW | CS_HREDRAW;
        wcx.hInstance     = hInst;
    //    wcx.hIcon         = LoadIcon( hInst, MAKEINTRESOURCE( IDI_MAIN));
    //    wcx.hIconSm       = LoadIcon( hInst, MAKEINTRESOURCE( IDI_MAIN));
        wcx.hCursor       = LoadCursor( NULL, IDC_ARROW);
        wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
     //   wcx.lpszMenuName  = MAKEINTRESOURCE( IDR_MENU);
        wcx.cbClsExtra    = 0;
        wcx.cbWndExtra    = 0;
    
        if( !RegisterClassEx( &wcx))
            return 0;
    
      //  acc = LoadAccelerators( hInst, MAKEINTRESOURCE(IDR_ACCEL));
    
        bruttohoehe = nettohoehe + 2*GetSystemMetrics( SM_CYSIZEFRAME) 
                                               + GetSystemMetrics( SM_CYMENU)
                                               + GetSystemMetrics( SM_CYCAPTION);
        bruttobreite = nettobreite + 2*GetSystemMetrics( SM_CXSIZEFRAME);
    
        lol_window = CreateWindowEx( 0, TEXT( "LOL"), TEXT( "LOL"), WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, 
                                                       CW_USEDEFAULT, CW_USEDEFAULT,
                                                         bruttobreite, bruttohoehe, NULL, NULL, hInst, NULL);
        if( !lol_window)
            return 0;
    
        lol_menu = GetMenu( lol_window);
    
        MoveWindow( lol_window, (GetSystemMetrics(SM_CXSCREEN)-bruttobreite)/2,
                                   (GetSystemMetrics(SM_CYSCREEN)-bruttohoehe)/2, 
                                                                        bruttobreite, bruttohoehe, TRUE);
    
        ShowWindow( lol_window, nCmdShow);
    
        while( TRUE)
            {
            if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE))
                {
                if( GetMessage( &msg, NULL, 0, 0 ) == 0)
                    return 0;
    
                 if( TranslateAccelerator( lol_window, acc, &msg) == 0)
                    {
                    TranslateMessage( &msg); 
                    DispatchMessage( &msg);
                    }
                }
            else
                {
                // Hier koennen wir uns um das Spiel kuemmern
                }
            }
        }
    
    
    class display
    {
        private:
        CDisplay dsply;
        CSurface *hgrnd;
        CSurface *Tiles;
        public:
        display()
        {
            int i;
            hgrnd = 0;
            Tiles = 0;
        }
        void free_all()
            {
            int i;
            if (hgrnd)
                delete hgrnd;
                delete Tiles;
            }
         ~display(){free_all();}
        HRESULT init(HWND wnd)
            {
            HRESULT hr;
            int i;
        
            hr = dsply.CreateFullScreenDisplay(wnd, nettobreite, nettohoehe, 16);
    
            if (hr < 0)
                return hr;
            hr = dsply.CreateSurfaceFromBitmap(&hgrnd, "background.bmp", nettobreite, nettohoehe);
    
            if (hr < 0)
                return hr;
    
            hr = dsply.CreateSurfaceFromBitmap(&Tiles, "tileset.bmp", tilehoehe, tilebreite);
    
                if (hr < 0)
                    return hr;
            return S_OK;
            }
        void draw_background(){dsply.Blt(0,0, hgrnd);}
        void draw_Tile(int i, int x, int y)
        {
            RECT r;
            r.left = tilekoord[i].x;
            r.top = tilekoord[i].y;
            r.right = tilekoord[i].x + 16;
            r.bottom = tilekoord[i].y + 16;
            dsply.Blt(x, y, Tiles, r);
        }
    }
    Allerdings liefert mir der Compiler (Visual Studio 2005) ständig den Fehler "Unerwartetes Dateiende gefunden und verweist auf Zeile 1. Klingt nach richtig argem Noobfehler, aber ich find einfach nichts.
    Kann mit bitte jemand helfen?

    Geändert von Ignis-sama (18.10.2007 um 22:29 Uhr)

  2. #2
    Bei der Klasse display fehlt das semikolon am schluss.
    Code:
    class display
    {
    
    };

  3. #3
    xD danke^^
    der Umstieg von C# auf C++ ist echt schwer^^

  4. #4
    So, ich hab jetzt ein paar geringfügige Änderungen vorgenommen, hab aber schon wieder nen Fehler. Ich möchte ein Teilrechteck blitten, aber bekomme diese Fehler:

    Fehler 1 error C2664: 'CDisplay:reateSurfaceFromBitmap': Konvertierung des Parameters 1 von 'LPDIRECTDRAWSURFACE7 **' in 'CSurface **' nicht möglich cDokumente und Einstellungen\Florian\Eigene Dateien\Visual Studio 2005\Projects\LOL Maker\LOL Maker\Programm.cpp 173
    Fehler 2 error C2664: 'HRESULT CDisplay:lt(DWORD,DWORD,LPDIRECTDRAWSURFACE7,RECT *,DWORD)': Konvertierung des Parameters 3 von 'LPDIRECTDRAWSURFACE7 *' in 'LPDIRECTDRAWSURFACE7' nicht möglich cDokumente und Einstellungen\Florian\Eigene Dateien\Visual Studio 2005\Projects\LOL Maker\LOL Maker\Programm.cpp 187

    Naja, das wurde nur kurz in dem Buch, das ich les erwähnt, so ein Rechteck aus einem Surface zu nehmen, wie sollte ich da vorgehen? bzw. wäre es besser, ein Array mit den einzelnen Tiles zu erstellen, anstatt Teilrechtecke aus einem ganzen Tileset zu nehmen?

  5. #5
    Das Problem beim zweiten müsste sein, dass du einen pointer auf ein Objekt übergibst, wo das Objekt verlangt wird. Wenn ich mich recht erinnere, musst du beim Funktionsaufruf vor dem pointer ein '*' zum dereferenzieren hinzufügen.
    Code:
    LPDIRECTDRAWSURFACE7* pointer = 0;
    irgendeineFunktion(0,0, *pointer);
    Wegen dem ersten Fehler:
    Inwiefern hängen LPDIRECTDRAWSURFACE7 und 'CSurface zusammen? Vererbte klassen?
    Und zeig da mal ein bisschen Code an der Stelle des Funktionsaufrufes und davor.

  6. #6
    Code:
     Inwiefern hängen LPDIRECTDRAWSURFACE7 und 'CSurface zusammen? Vererbte klassen?
    Weiß ich auch nicht. Wird in meiner Referenz nirgends erwähnt, naja, ich mach es jetzt eh anders, ich speichere die Tiles in einem CSurface-Array, sollte eh besser funktionieren, aber trotzdem danke für die Hilfe!

  7. #7
    ...

    DXSDK 7... Wobei ich gar nicht erkennen kann, was daran DirectX ist. Z.B. seh ich für DirectX 7 kein DirectDrawCreateEx oder SetDisplayMode. LPDIRECTDRAWSURFACE7 ginge schon Richtung DirectX. Zudem müsstest du von LPDIRECTDRAWSURFACE7 keinen Pointer machen, das vorgestellte LP will darauf hinweisen, dass es ein Pointer ist.

    and Btw. in DirectX hat man es normalerweise nicht nötig mit Tiles zu arbeiten. Ich würde sowieso auf das DXSDK 9 oder wenigstens 8 umsteigen, da ist alles ein bischen anders mit den Interfaces, aber das Prinzip ist das gleiche.

    Geändert von Drakes (19.10.2007 um 09:50 Uhr)

  8. #8
    ähmm... ich benutze das neueste direct x sdk...
    was genau meinst du soll anders sein?

  9. #9
    Tut mir leid, aber das kann ich dir einfach nicht glauben, seit DirectX 8 "gibt es directdraw nicht mehr"(es ist in Direct3D enthalten). Eine aktuelle Einbindung der Headerdateien sieht so aus:
    Code:
    #include <d3d9.h>
    #include <d3dx9.h>
    #include <dxerr.h>
    bzw. mit 10 ersetzt, falls man schon mit DirectX 10 programmiert.

    ok ich probier mal zu zeigen wie man DirectX initialisiert:
    Code:
    // Variablen
    LPDIRECT3D9 lpD3D = NULL;
    LPDIRECT3DDEVICE9 lpD3DDevice = NULL;
    Code:
    // Initialisierung
    if( NULL == ( lpD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
            return Fehler("Direct3DCreate9() fehlgeschlagen!");
    
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory( &d3dpp, sizeof(d3dpp) );
        d3dpp.Windowed = false; // für Fullscreen
        d3dpp.hDeviceWindow = hWnd;
        d3dpp.BackBufferWidth = /* Auflösungsbreite */;
        d3dpp.BackBufferHeight = /* Auflösungshöhe */;
        d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP; // naja hier bin ich mir nicht mehr ganz sicher
        d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    
        HRESULT hResult;
        if( FAILED( hResult = lpD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                      &d3dpp, &lpD3DDevice ) ) )
        {
            DXTrace(__FILE__,__LINE__,hResult,NULL,true);
            return /*irgendwas, kommt drauf an, was man für ein System hat*/;
        }
    Code:
    // freigeben
    if(NULL != lpD3DDevice)
        {
            lpD3DDevice->Release();
            lpD3DDevice = NULL;
        }
        if(NULL != lpD3D)
        {
            lpD3D->Release();
            lpD3D = NULL;
        }
    am Besten packt man dies in eine Klasse.

    Geändert von Drakes (19.10.2007 um 17:03 Uhr)

  10. #10
    Naja, dabei ist DirectDraw eigentlich schon, es wird nur nicht mehr weiterentwickelt. Ich hab ein paar Beispiele, die DirectDraw verwenden kompiliert und die gingen mit dem neuesten SDK ohne Probleme.
    Ich hab mich jetzt ein wenig umgehört und erfahren, dass Direct3D hardwarebeschleunigt ist und DirectDraw nicht, kann mir jemand vllt ein gutes Tutorial empfehlen, welches 2D Programmierung mit Direct3D erklärt, ich will nicht extra alles über 3D Programmierung lernen, um auch was in 2D zu erstellen, da mir das jetzt doch noch zu kompliziert ist.

  11. #11
    Zitat Zitat von Drakes Beitrag anzeigen
    Tut mir leid, aber das kann ich dir einfach nicht glauben, seit DirectX 8 "gibt es directdraw nicht mehr"(es ist in Direct3D enthalten). Eine aktuelle Einbindung der Headerdateien sieht so aus:
    Also vom Hören-Sagen her hieß es mal, dass DirectDraw (bzw alle 2D Operationen) seit der 7er Version gleichgeblieben ist. Das heißt, bei DirectX8 und die folgenden wurden lediglich die 3D Teile ausgetauscht und verbessert. Demnach wird selbst beim 9er DirectX in Verwendung mit 2D Grafik noch die Bestandteile vom 7er verwendet, die sich seitdem nicht verändert haben. Entsprechend kann es gut sein, dass dort von Dx7 die Rede ist, auch wenn er Dx9 verwendet. Aber sicher bin ich mir bei all dem nicht.

    Verwendet lieber OpenGL, ist eh besser.

  12. #12
    Zitat Zitat von Ynnus Beitrag anzeigen
    Also vom Hören-Sagen her hieß es mal, dass DirectDraw (bzw alle 2D Operationen) seit der 7er Version gleichgeblieben ist. Das heißt, bei DirectX8 und die folgenden wurden lediglich die 3D Teile ausgetauscht und verbessert. Demnach wird selbst beim 9er DirectX in Verwendung mit 2D Grafik noch die Bestandteile vom 7er verwendet, die sich seitdem nicht verändert haben. Entsprechend kann es gut sein, dass dort von Dx7 die Rede ist, auch wenn er Dx9 verwendet. Aber sicher bin ich mir bei all dem nicht.
    So ist es ich glaube, bei jedem DirectX SDK sind die Headerdateien von den älteren Versionen auch noch drin.

    Zitat Zitat von Ynnus Beitrag anzeigen
    Verwendet lieber OpenGL, ist eh besser.
    Nimm besser ne Engine die DirectX unterschtützt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •