[updated]- [c] centraliser declaration de variable.

centraliser declaration de variable. [updated]- [c] - C - Programmation

Marsh Posté le 01-06-2007 à 21:46:45    

Bonsoir,

 

Le problème est simple, j'ai un programme que j'ai couper en plusieurs fichier .cpour le compiler à l'aide d'un makefile.De plus il y a tout un tas de variable qui sont utilisé dans plusieurs des fichiers. je les ai donc déclarées dans un header, que j'inclue dans chaque source.J'ai aussi regroupé les initialisations dans un .c, mais c'est là que ça ne marche plus.

 

voici le code incriminé :

 

var.h :

Code :
  1. #ifndef VAR_H
  2. #define VAR_H
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <SDL/SDL_getenv.h> /* bibli permettant d'avoir putevent*/
  6. #include <SDL/SDL.h>
  7. #include <SDL/SDL_image.h>
  8. #include <SDL/SDL_framerate.h> /*initialisation de la lib pour la gestion des fps*/
  9. /* variables globales du jeux*/
  10. #define VIT 3
  11. #define WINX 800
  12. #define WINY 650
  13. #define FPS_LIMIT 40
  14. #define VIE 25
  15. /* les coordonnées des images*/
  16. SDL_Rect pPalette;
  17. SDL_Rect pBalle;
  18. SDL_Rect pFond;
  19. SDL_Rect pBriques;
  20. SDL_Rect pGagne;
  21. SDL_Rect pCharge;
  22. SDL_Rect pPerd;
  23. /* Les diff�rentes variables pour le bon deroulement du jeu*/                                                       
  24. FPSmanager manager;
  25. int game,score,fin,tab ,vie;
  26. SDL_Surface *perdu;
  27. SDL_Surface *Screen;
  28. int x,y,i;
  29. SDL_Surface *brique[5],*raquet,*balle,*fond,*charge,*gagne;
  30. float vit,sens1,sens2;
  31. SDL_Event event;
  32. #endif
 


et initvar.c

 
Code :
  1. #include "var.h"
  2. /* les coordonnées des images*/
  3. pPalette={0,0,0,0};
  4. pBalle={0,0,0,0};
  5. pCharge={80,100,0,0};
  6. /* Les diff�rentes variables pour le bon deroulement du jeu*/                                                       
  7. game=1;
  8. score=0;
  9. fin=1;
  10. tab=0;
  11. vie=VIE;
  12. x=0;y=0;
  13. vit=VIT;
  14. sens1=0;
  15. sens2=1;
  16. /* les differentes positions des briques sur 5 niveaux*/
  17. unsigned char placement[10][10]={
  18.   0,1,4,2,3,3,2,4,1,0,
  19.                         2,1,3,0,0,0,0,3,2,2,
  20.                         0,0,0,3,4,4,3,0,0,0,
  21.                         0,4,3,2,1,1,2,3,4,0,
  22.                         2,1,3,0,0,0,0,3,2,2,
  23.                         0,2,0,3,4,4,3,0,2,0,
  24.                         1,0,0,3,4,4,3,0,0,1,
  25.                         0,0,0,0,0,0,0,0,0,0,
  26.                         0,0,0,0,0,0,0,0,0,0,
  27.                         0,0,0,0,0,0,0,0,0,0
  28.                          };
  29. unsigned char placement1[10][10]={
  30.   4,1,0,2,3,3,2,0,1,4,
  31.                         2,1,3,0,0,1,0,3,2,2,
  32.                         0,3,0,3,4,4,3,0,3,0,
  33.                         0,4,0,2,0,1,0,3,0,4,
  34.                         0,1,3,0,1,0,0,3,2,1,
  35.                         0,2,4,3,0,0,3,4,2,0,
  36.                         1,0,0,3,4,4,3,0,0,1,
  37.                         0,0,0,0,0,0,0,0,0,0,
  38.                         0,0,0,0,0,0,0,0,0,0,
  39.                         0,0,0,0,0,0,0,0,0,0       
  40.                          };
  41. unsigned char placement2[10][10]={
  42.   0,1,4,2,0,0,2,4,1,0,
  43.                         2,0,0,2,1,1,2,0,0,2,
  44.                         4,1,0,3,0,0,3,0,1,4,
  45.                         0,4,3,2,1,1,2,3,4,0,
  46.                         2,0,4,0,1,1,0,4,0,2,
  47.                         1,0,0,3,4,4,3,0,0,1,
  48.                         4,2,0,1,0,0,1,0,2,4,
  49.                         0,0,0,0,0,0,0,0,0,0,
  50.                         0,0,0,0,0,0,0,0,0,0,
  51.                         0,0,0,0,0,0,0,0,0,0       
  52.                          };                                             
  53. unsigned char placement3[10][10]={
  54.   2,0,4,2,1,1,2,4,0,2,
  55.                         2,1,3,0,0,0,0,3,2,2,
  56.                         0,0,0,3,4,4,3,0,0,0,
  57.                         2,0,4,0,1,1,0,4,0,2,
  58.                         2,1,3,0,2,2,0,3,2,2,
  59.                         1,0,0,3,4,4,3,0,0,1,
  60.                         4,1,0,3,0,4,3,0,1,4,
  61.                         0,0,0,0,0,0,0,0,0,0,
  62.                         0,0,0,0,0,0,0,0,0,0,
  63.                         0,0,0,0,0,0,0,0,0,0       
  64.                        };                                                                                           
  65. unsigned char placement4[10][10]={
  66.   1,0,3,2,0,3,2,0,0,1,
  67.                         2,1,3,4,0,0,4,3,1,2,
  68.                         0,1,0,3,0,0,3,0,1,0,
  69.                         2,0,4,0,0,0,0,4,0,2,
  70.                         2,0,3,0,2,2,0,3,0,2,
  71.                         1,0,4,3,2,2,3,4,0,1,
  72.                         0,1,2,3,4,4,3,2,1,0,
  73.                         0,0,0,0,0,0,0,0,0,0,
  74.                         0,0,0,0,0,0,0,0,0,0,
  75.                         0,0,0,0,0,0,0,0,0,0       
  76.                          };
 

à la compilation , j'ai des erreurs du type  :

Code :
  1. initvar.c:6: attention : la définition de données n'a pas de type ni de classe de stockage
  2. initvar.c:6: erreur: conflicting types for ‘pPalette’
  3. var.h:22: erreur: previous declaration of ‘pPalette’ was here
  4. initvar.c:6: attention : éléments en excès dans l'initialisation d'un scalaire
  5. initvar.c:6: attention : (near initialization for ‘pPalette’)
  6. initvar.c:6: attention : éléments en excès dans l'initialisation d'un scalaire
  7. initvar.c:6: attention : (near initialization for ‘pPalette’)
  8. initvar.c:6: attention : éléments en excès dans l'initialisation d'un scalaire
  9. initvar.c:6: attention : (near initialization for ‘pPalette’)
  10. initvar.c:7: attention : la définition de données n'a pas de type ni de classe de stockage
  11. initvar.c:7: erreur: conflicting types for ‘pBalle’
  12. var.h:23: erreur: previous declaration of ‘pBalle’ was here
  13. initvar.c:7: attention : éléments en excès dans l'initialisation d'un scalaire
  14. initvar.c:7: attention : (near initialization for ‘pBalle’)
  15. initvar.c:7: attention : éléments en excès dans l'initialisation d'un scalaire
  16. initvar.c:7: attention : (near initialization for ‘pBalle’)
  17. initvar.c:7: attention : éléments en excès dans l'initialisation d'un scalaire
  18. initvar.c:7: attention : (near initialization for ‘pBalle’)
  19. initvar.c:8: attention : la définition de données n'a pas de type ni de classe de stockage
  20. initvar.c:8: erreur: conflicting types for ‘pCharge’
  21. var.h:27: erreur: previous declaration of ‘pCharge’ was here
  22. initvar.c:8: attention : éléments en excès dans l'initialisation d'un scalaire
  23. initvar.c:8: attention : (near initialization for ‘pCharge’)
  24. initvar.c:8: attention : éléments en excès dans l'initialisation d'un scalaire
  25. initvar.c:8: attention : (near initialization for ‘pCharge’)
  26. initvar.c:8: attention : éléments en excès dans l'initialisation d'un scalaire
  27. initvar.c:8: attention : (near initialization for ‘pCharge’)
  28. initvar.c:15: attention : la définition de données n'a pas de type ni de classe de stockage
  29. initvar.c:16: attention : la définition de données n'a pas de type ni de classe de stockage
  30. initvar.c:17: attention : la définition de données n'a pas de type ni de classe de stockage
  31. initvar.c:18: attention : la définition de données n'a pas de type ni de classe de stockage
  32. initvar.c:19: attention : la définition de données n'a pas de type ni de classe de stockage
  33. initvar.c:20: attention : la définition de données n'a pas de type ni de classe de stockage
  34. initvar.c:20: attention : la définition de données n'a pas de type ni de classe de stockage
  35. initvar.c:21: attention : la définition de données n'a pas de type ni de classe de stockage
  36. initvar.c:21: erreur: conflicting types for ‘vit’
  37. var.h:39: erreur: previous declaration of ‘vit’ was here
  38. initvar.c:22: attention : la définition de données n'a pas de type ni de classe de stockage
  39. initvar.c:22: erreur: conflicting types for ‘sens1’
  40. var.h:39: erreur: previous declaration of ‘sens1’ was here
  41. initvar.c:23: attention : la définition de données n'a pas de type ni de classe de stockage
  42. initvar.c:23: erreur: conflicting types for ‘sens2’
  43. var.h:39: erreur: previous declaration of ‘sens2’ was here
 

Si quelqu'un voit une erreur ...

 

Merci d'avance.

 

PS compilation avec gcc dernière version


Message édité par castorgris le 02-06-2007 à 10:54:45
Reply

Marsh Posté le 01-06-2007 à 21:46:45   

Reply

Marsh Posté le 01-06-2007 à 21:56:29    

Code :
  1. #ifndef H_TOTO
  2. #define H_TOTO
  3. /* Le contenu de ton .h va ici */
  4. #endif


Tu ne fais pas des trucs de ce genre dans tes .h ? Tu devrais.
 
Ensuite attention, ne confond pas déclaration et définition. Les déclarations des trucs utilisés dans plusieurs fichiers .c vont dans un .h inclu dans chancun de ses fichiers (et le variables globales sont déclarées "extern" dans ce .h). Les définitions, elles, vont dans un .c. On ne met jamais de définitions dans un .h (ou presque).


Message édité par matafan le 01-06-2007 à 21:57:42
Reply

Marsh Posté le 01-06-2007 à 22:15:01    

EDIT : bin non, le probleme n'était pas ça, puisque ça ne marche plus.
 


Message édité par castorgris le 02-06-2007 à 08:32:26
Reply

Marsh Posté le 02-06-2007 à 10:31:44    

Je l'ai déjà dit et je le redis : ne définit pas tes variables dans le .h. Ensuite les numéros de ligne dans les messages d'erreur ne correspondent pas aux numéro de ligne des bouts de code que tu donnes. Tu est sûr que tes sources sont comme ça ?
 
Aussi, évites d'éditer tes messages pour ajouter des tonnes d'info quand quelqu'un à déja répondu...


Message édité par matafan le 02-06-2007 à 10:32:50
Reply

Marsh Posté le 02-06-2007 à 10:59:09    

maj des numero de lignes.

 

Que veux tu dire par definition de variables ?
ce sont les

Code :
  1. #define VIT 3
  2. #define WINX 800
  3. #define WINY 650
  4. #define VIE 25


qui ne sont pas au bon endroit ? Et ci oui, ou dois-je les mettre ? Si j eles  mat dasn chaque source, j'ai des message me disant qu'il y a multiple définition...

 


Ensuite, fallait-il que je creais un autre post, ou que je rajoute un post suplementaire au lieux de l'édition ?

 


Enfin, merci de me consacrer un peu de ton temp.


Message édité par castorgris le 02-06-2007 à 10:59:28
Reply

Marsh Posté le 02-06-2007 à 11:56:25    

Je parles des :

Code :
  1. SDL_Rect pPalette;
  2. SDL_Rect pBalle;
  3. SDL_Rect pFond;
  4. SDL_Rect pBriques;
  5. SDL_Rect pGagne;
  6. SDL_Rect pCharge;
  7. SDL_Rect pPerd;
  8. FPSmanager manager;
  9. int game,score,fin,tab ,vie;
  10. SDL_Surface *perdu;
  11. SDL_Surface *Screen;
  12. int x,y,i;
  13. SDL_Surface *brique[5],*raquet,*balle,*fond,*charge,*gagne;
  14. float vit,sens1,sens2;
  15. SDL_Event event;


Ca devrait aller dans un .c. Par contre dans ton .h, tu met les déclarations :

Code :
  1. extern SDL_Rect pBalle;
  2. /* ... */
  3. extern SDL_Event event;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed