SDL - Bezeichner werden nicht gefunden



  • Hallo,

    Ich benutze MS Visual 2008 Express und bekomme beim kompilieren immer folgende Fehler:

    ------ Erstellen gestartet: Projekt: Mein SDL Projekt, Konfiguration: Debug Win32 ------
    Kompilieren...
    main.cpp
    c:\dokumente und einstellungen\***\eigene dateien\visual studio 2008\projects\mein sdl projekt\mein sdl projekt\main.cpp(53) : error C3861: "load_image": Bezeichner wurde nicht gefunden.

    c:\dokumente und einstellungen\***\eigene dateien\visual studio 2008\projects\mein sdl projekt\mein sdl projekt\main.cpp(80) : error C3861: "apply_surface": Bezeichner wurde nicht gefunden.

    c:\dokumente und einstellungen\***\eigene dateien\visual studio 2008\projects\mein sdl projekt\mein sdl projekt\main.cpp(81) : error C3861: "apply_surface": Bezeichner wurde nicht gefunden.

    c:\dokumente und einstellungen\***\eigene dateien\visual studio 2008\projects\mein sdl projekt\mein sdl projekt\main.cpp(90) : error C2601: 'clean_up': Lokale Funktionsdefinitionen sind unzulässig
    c:\dokumente und einstellungen\***\eigene dateien\visual studio

    2008\projects\mein sdl projekt\mein sdl projekt\main.cpp(69):
    Diese Zeile enthält eine '{', die keine Entsprechung hat

    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\***\Eigene Dateien\Visual Studio 2008\Projects\Mein SDL Projekt\Mein SDL Projekt\Debug\BuildLog.htm" gespeichert.

    Mein SDL Projekt - 4 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    //The headers
    #include "SDL_.h"
    #include "SDL_image.h" 
    #include <string>
    
    //Screen attributes
    const int SCREEN_WIDTH = 640;
    const int SCREEN_HEIGHT = 480;
    const int SCREEN_BPP = 32;
    
    //The surfaces
    SDL_Surface *image = NULL;
    SDL_Surface *screen = NULL;
    
    SDL_Surface *load_image( std::string filename )
    {
        //The image that's loaded
        SDL_Surface* loadedImage = NULL;
    
        //The optimized image that will be used
        SDL_Surface* optimizedImage = NULL;
    
        //Load the image using SDL_image
        loadedImage = IMG_Load( filename.c_str() );
    
        //If the image loaded
        if( loadedImage != NULL )
        {
            //Create an optimized image
            optimizedImage = SDL_DisplayFormat( loadedImage );
    
            //Free the old image
            SDL_FreeSurface( loadedImage );
        }
    
        //Return the optimized image
        return optimizedImage;
    }
    
    void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )
    {
        //Rectangle to hold the offsets
        SDL_Rect offset;
    
        //Get offsets
        offset.x = x;
        offset.y = y;
    
        //Blit the surface
        SDL_BlitSurface( source, NULL, destination, &offset );
    }
    
    bool init()
    {
        //Initialize all SDL subsystems
        if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        {
            return false;
        }
    
        //Set up the screen
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
    
        //If there was an error in setting up the screen
        if( screen == NULL )
        {
            return false;
        }
    
        //Set the window caption
        SDL_WM_SetCaption( "PNG test", NULL );
    
        //If everything initialized fine
        return true;
    }
    
    void clean_up()
    {
        //Free the surface
        SDL_FreeSurface( image );
    
        //Quit SDL
        SDL_Quit();
    }
    
    int main( int argc, char* args[] )
    {
        //Initialize
        if( init() == false )
        {
            return 1;
        }
    
        //Load the image
        image = load_image( "look.png" );
    
        //If there was a problem in loading the image
        if( image == NULL )
        {
            return 1;
        }
    
        //Apply the surface to the screen
        apply_surface( 0, 0, image, screen );
    
        //Update the screen
        if( SDL_Flip( screen ) == -1 )
        {
            return 1;
        }
    
        //Wait 2 seconds
        SDL_Delay( 2000 );
    
        //Free the surface and quit SDL
    
        return 0;
    }
    

    Der Quelltext ist von einem Lazy Foo Tutorial kopiert (http://www.lazyfoo.net/SDL_tutorials/lesson03/index.php) ... weiß Jemand wie ich die Fehler beheben kann?
    Die Datei "look.png" befindet sich im Projektordner und die SDL ist auch richtig konfiguriert (denke ich).



  • Ist das auch der originale Sourcecode? Ich sehe in Zeile 53 nämlich kein "load_image"-Aufruf.



  • Kóyaánasqatsi schrieb:

    Ist das auch der originale Sourcecode? Ich sehe in Zeile 53 nämlich kein "load_image"-Aufruf.

    Die Zeilennummern können doch hier ganz andere sein als im Editor.

    @_Kay_: Er sagt dir doch den Fehler. Der Compiler findet einen Bezeichner nicht. Also entweder brauchst du eine Forward Declartion oder (meistens) einfach den Header einbinden. Ich bezweifle, dass der richtige Header "SDL_.h" heißt.



  • Wie meinst du das genau? Was für einen Header soll ich denn sonst einbinden? Ganz genau so stand es in dem Tutorial, ich weiß nicht was ich sonst einbinden soll.

    Ach und die DLL´s, müssen die in dem Ordner sein wo das Projekt ist oder im SDL Ordner?



  • Kay schrieb:

    Wie meinst du das genau? Was für einen Header soll ich denn sonst einbinden?

    Den richtigen.

    Kay schrieb:

    Ach und die DLL´s, müssen die in dem Ordner sein wo das Projekt ist oder im SDL Ordner?

    http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx



  • Problem gelöst - lag wie du gesagt hast am falschen Include-Befehl, er musste nämlich "SDL.h" heißen und nicht "SDL_.h". 🙂

    Gruß,

    Kay


Anmelden zum Antworten