Erreur C

Résolu/Fermé
sof_24 Messages postés 146 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 6 juin 2014 - 9 mars 2014 à 16:57
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 9 mars 2014 à 17:51
Bonjour,
J'essais de compiler ce programme sous linux:

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>

struct monev{
  Uint8 type;
  int code;
  void *data1;
  void *data2;
} ;
typedef struct monev monev;


SDL_Event event; 


	monev.user.code=1
		
int main(int argc, char *argv[])
{
		

		SDL_Surface *ecran = NULL, *zozor = NULL, *zozor1=NULL;
    SDL_Rect positionZozor, positionZozor1;
    SDL_Event event;
    int continuer = 1;
    int tempsPrecedent = 0, tempsActuel = 0, tempsPrecedent1=0, tempsActuel1=0;
    SDL_Init(SDL_INIT_VIDEO);
    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Gestion du temps en SDL", NULL);
    zozor = SDL_LoadBMP("zozor.bmp");
		zozor1=SDL_LoadBMP("zozor.bmp");
    SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
    positionZozor.x = ecran->w / 2 - zozor->w / 2;
    positionZozor.y = ecran->h / 2 - zozor->h / 2;
		positionZozor1.x = ecran->w ;
    positionZozor1.y = ecran->h / 2 - zozor1->h / 2;
    SDL_EnableKeyRepeat(10, 10);
    while (continuer)
    {
        SDL_PollEvent(&monev); /* On utilise PollEvent et non WaitEvent pour ne pas bloquer le programme */
        switch(monev.type)
        {
            case SDL_USEREVENT:
                continuer = 0;
                break;
        }
        tempsActuel = SDL_GetTicks();
        if (tempsActuel - tempsPrecedent > 30) /* Si 30 ms se sont écoulées depuis le dernier tour de boucle */
        {
            positionZozor.x++; /* On bouge Zozor */
            tempsPrecedent = tempsActuel; /* Le temps "actuel" devient le temps "precedent" pour nos futurs calculs */
        }
        

				
				if (SDL_GetTicks()>3000)
				{	
					
					tempsActuel1 = SDL_GetTicks()-3000;
					
       	 if (tempsActuel1 - tempsPrecedent1 > 30) /* Si 30 ms se sont écoulées depuis le dernier tour de boucle */
        	{
        	    positionZozor1.x=positionZozor1.x-1; /* On bouge Zozor */
        	    tempsPrecedent1 = tempsActuel1; /* Le temps "actuel" devient le temps "precedent" pour nos futurs calculs */
       	  }

					SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
					SDL_BlitSurface(zozor1, NULL, ecran, &positionZozor1);

    		}
				
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
	      SDL_Flip(ecran);
				SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
		}
    SDL_FreeSurface(zozor);
		SDL_FreeSurface(zozor1);
    SDL_Quit();
    return EXIT_SUCCESS;
}


Le problème c'est que le terminal affiche l'erreur suivante, que j'ai pas pu comprendre et corriger, lors de la compilation:
sdl_test_2.c:18:7: error: expected identifier or `(' before `.' token
monev.user.code=1
^
Aidez moi s'il vous plaît..

3 réponses

cocodu67... Messages postés 3162 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 20 novembre 2024 145
9 mars 2014 à 17:02
Lu'

Je connais rien aux SDL mais il manque pas un point virgule derrière
monev.user.code=1
??
0
sof_24 Messages postés 146 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 6 juin 2014 4
9 mars 2014 à 17:11
Vous avez raison, et je pense que j'ai pas effectué les instructions concernées dans le bon endroitn je dois les mettre dans le main.
0
cocodu67... Messages postés 3162 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 20 novembre 2024 145
9 mars 2014 à 17:14
En effet, le placement de certaines lignes me parait bizarre.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
9 mars 2014 à 17:51
Bonjour,

L'indentation n'est pas terrible...
Du coup, j'ai pas tout lu le code.

monev.user.code=1
Il manque un ;
Sans être obligatoire, il vaut mieux le mettre dans le main.
De plus, il faut déclarer la variable.
Et enfin, user n'est pas un membre de la structure.

Cdlt,
0