Einsteigerfrage zu C++ und SDL



  • Hallo!

    Ich habe bisher immer mit Freebasic und SDL programmiert, bin aber jetzt am Umsteigen, da ich ja SDL schon kann, und auch schon ein bisschen mit iostream experimentiert habe, und da dachte ich, kann ja net so schwer sein. Falsch gedacht.

    Ich habe mal ein ganz einfaches Programm geschrieben, womit ich einfach mal nur in C++ mit SDL einsteigen wollte.

    Hier der Problematische Teil des Programmes:

    int main( int argc, char* argv[] ) 
    {  
    SDL_Init( SDL_INIT_VIDEO | SDL_INIT_TIMER );  
    SDL_Surface *bildschirm;
    bildschirm=SDL_SetVideoMode(640,480,16,SDL_DOUBLEBUF);
    atexit(SDL_Quit);
    if (bildschirm=NULL){exit(1);}
    SDL_WM_SetCaption("SuperSpiel", NULL);
    spielerklasse *spieler[2];
    spieler[0]=new spielerklasse;
    spieler[1]=new spielerklasse;
    bool ende;
    SDL_Event ereigniss;
    ende=false;
    while (ende==false)
    {     
          while (SDL_PollEvent(&ereigniss))
          {
                if (ereigniss.type==SDL_QUIT){exit(0);}      
                if (ereigniss.type==SDL_KEYDOWN){
                         if (ereigniss.key.keysym.sym==SDLK_ESCAPE){exit(0);}  
                         } 
          }
          SDL_FillRect(bildschirm, NULL, SDL_MapRGB(bildschirm->format, 1,1,255));                 
    
          SDL_Flip(bildschirm);
          SDL_Delay(20);
          }
    
    SDL_Quit( ); 
    }
    

    Wenn ich SDL_FillRect und SDL_Flip wegkommentiere, dann funktioniert es(aber nur dann; mit einem von beidem stürzt es ab.

    Was ist daran falsch?



  • if (bildschirm=NULL)...
    *ZONK* 😉

    Heißt soviel wie: Weise 'bildschirm' den Wert 0 zu, und dann, wenn 'bildschirm' ungleich 0 ist (was es ja nicht mehr sein kann), beende das Programm.
    Das soll eine Sicherheitsüberprüfung sein.

    Du willst aber sicherlich vergleichen.
    Das macht man mit zwei == !
    Deswegen tauscht man die Reihenfolge oft so, dass links die Konstante steht.
    Da man einer Konstanten nichts zuweisen kann, ergibt
    if (0 = Wert)
    einen Fehler schon beim Compilieren.
    if (0 == Wert) jedoch nicht.



  • Stimmt..total vergesssen, dachte irgendwie nur an die Befehle, und hab drüber nachgedacht, ob bildschirm->Format auch in c++ dereferenzieren ist^^ Danke!


Anmelden zum Antworten