Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SDL] Uint8 * keystate = SDL_GetKeyState(NULL); //error: initializer element is not constant

Ostatnio zmodyfikowano 2011-05-03 13:44
Autor Wiadomość
unreal
Temat założony przez niniejszego użytkownika
[SDL] Uint8 * keystate = SDL_GetKeyState(NULL); //error: initializer element is not constant
» 2011-05-03 13:17:14
C/C++
#include <sdl/SDL.h>
#include <stdbool.h>
#include <stdint.h> // dodałem do Uint8 dalej nic

SDL_Surface * ekran = NULL;
SDL_Surface * ludek = NULL;
SDL_Event zdarzenie;
SDL_Rect LudekDestination;
Uint8 * keystate = SDL_GetKeyState( NULL );
int x;
bool wyjscie = false;
int main( int argc, char * args[] )
{
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    ludek = SDL_LoadBMP( "bb.bmp" );
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
        }
        if( keystate[ SDLK_RIGHT ] )
        {
            x++;
        }
        LudekDestination.x = x;
        SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
        SDL_Flip( ekran );
    }
    SDL_FreeSurface( ludek );
    SDL_Quit();
    return 0;
}
wywala błąd:

C:\Users\unreal\Desktop\sdl\a1\a1\main.c|10|error: initializer element is not constant|
||=== Build finished: 1 errors, 0 warnings ===|

Do linkera mam dołączone :

libmingw32.a
libSDLmain.a
libSDL.dll.a

Kompilator MingW.

Proszę o pomoc.
P-32507
DejaVu
» 2011-05-03 13:23:30
C/C++
const Uint8 * keystate = SDL_GetKeyState( NULL );
P-32508
unreal
Temat założony przez niniejszego użytkownika
» 2011-05-03 13:25:05
Dalej ten sam błąd.
P-32509
DejaVu
» 2011-05-03 13:26:00
Bleh, sprawdzę - w8.

/edit:
C/C++
#include <sdl/SDL.h>
//#include <stdbool.h>
//#include <stdint.h> // dodałem do Uint8 dalej nic

SDL_Surface * ekran = NULL;
SDL_Surface * ludek = NULL;
SDL_Event zdarzenie;
SDL_Rect LudekDestination;
Uint8 * keystate = SDL_GetKeyState( NULL );
int x;
bool wyjscie = false;
int main( int argc, char * args[] )
{
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    ludek = SDL_LoadBMP( "bb.bmp" );
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
        }
        if( keystate[ SDLK_RIGHT ] )
        {
            x++;
        }
        LudekDestination.x = x;
        SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
        SDL_Flip( ekran );
    }
    SDL_FreeSurface( ludek );
    SDL_Quit();
    return 0;
}
Mi się to kompiluje na visualu...

/edit:
Czy aby na pewno masz rozszerzenie pliku *.cpp (czyli używasz C++, a nie C?)

/edit2:
Używasz C - wynika z logów kompilacji. Jeżeli piszesz w C to krzywdę sobie robisz, ale zadziała:
C/C++
Uint8 * keystate;
keystate = SDL_GetKeyState( NULL );
P-32510
unreal
Temat założony przez niniejszego użytkownika
» 2011-05-03 13:34:38
Ale ja używam Code::Block i MingW czyli gcc . Wiec to że na visualu się kompiluje to mnie nie ratuje :D Ale dzięki za zainteresowanie.

//edit No właśnie że ja to w .c
//edit2
Czemu sobie krzywdę robię?
Nie zadziała :/


C:\Users\unreal\Desktop\sdl\a1\a1\main.c|11|warning: data definition has no type or storage class|
C:\Users\unreal\Desktop\sdl\a1\a1\main.c|11|warning: type defaults to 'int' in declaration of 'keystate'|
C:\Users\unreal\Desktop\sdl\a1\a1\main.c|11|error: conflicting types for 'keystate'|
C:\Users\unreal\Desktop\sdl\a1\a1\main.c|10|note: previous declaration of 'keystate' was here|
C:\Users\unreal\Desktop\sdl\a1\a1\main.c|11|warning: initialization makes integer from pointer without a cast|
C:\Users\unreal\Desktop\sdl\a1\a1\main.c|11|error: initializer element is not constant|
C:\Users\unreal\Desktop\sdl\a1\a1\main.c||In function 'SDL_main':|
C:\Users\unreal\Desktop\sdl\a1\a1\main.c|27|error: subscripted value is neither array nor pointer|
||=== Build finished: 3 errors, 3 warnings ===|
P-32511
DejaVu
» 2011-05-03 13:40:43
Ponieważ później deklarujesz jeszcze zmienne. Najpierw się robi deklaracje w C, a później pisze kod. Nie można pisać jak w C++ tj. mieszać kodu z dodawaniem nowych zmiennych.

/edit:
A krzywdę robisz sobie dlatego, że odchodzi się od pisania w C ponieważ C++ ma większe możliwości, a można w razie czego pisać tak samo jak w C (z małymi wyjątkami gdzie C++ wymusza rzutowania). Ponadto masz większą kontrolę błędów w C++ aniżeli w C.
P-32512
unreal
Temat założony przez niniejszego użytkownika
» 2011-05-03 13:44:27
Ok zmieniłem na .cpp i działa jak powinno dzięki.
P-32513
« 1 »
  Strona 1 z 1