FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  [C++] Problème avec un tableau "partagé"

 




Wile E Coyote Jeux videos et Lan party : Psyc0, 1 utilisateur anonyme et 20 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Problème avec un tableau "partagé"

n°5240
Deather2
OpenBSD: the way to go!
Posté le 18-03-2005 à 21:04:42  profilanswer
 

Salut tout le monde,
Certains se rapellent peut être le RPG que je codais il y'a quelques temps.
À l'époque, j'était (très) inéxpérimenté, et j'avais chainé tout mes fichiers sources avec des includes, me permettant de compiler tout le code avec un simple g++ main.cpp -o Rpg
J'includais même des .cpp :/
 
Maintenant, j'ai refais proprement tout le code, en compilant avec -c toutes les sources, puis en linkant le code objet.
Et là, j'ai juste un petit soucis. J'ai un fichié nommé Map.h, qui contient 3 tableaux. voici le code :

Code :
  1. #ifndef __RPG_MAP_H__
  2. #define __RPG_MAP_H__
  3. const unsigned char Map1[25][45]=
  4. {
  5.   {0,0...},
  6. }
  7. const unsigned char Original_Map1_Items[25][45]=
  8. {
  9.   {0,0...},
  10. }
  11. unsigned char Map1_Items[25][45];
  12. #endif


Ce fichier est inclus par plusieurs .cpp différents.
Les deux premier tableaux sont initialisés, j'ai volontairement coupé le code.
Le prob, c'est le 3ème. Il est ammené à être modifié durant l'execution du prog.
Et là, au link, il me dis "Map1_Items was previsouly defined here", pour chaque fichier qui inclus Map.h.
 
Je le déclare en static pour voir, ça compile, mais ça merde à l'execution, car pour chaque source compilée, il crée un tableau different.
Ma question est: Comment faire pour avoir ce tableau "partagé" par toutes les fonctions?
 
Merci d'avance. :)


Message édité par Deather2 le 18-03-2005 à 21:17:53
mood
Google
Posté le 18-03-2005 à 21:04:42  profilanswer
 

n°5241
Lightness1​024
Posté le 18-03-2005 à 21:45:07  profilanswer
 

ben le tableau en global dans un seul des modules et déclaré en 'extern' dans les autres.
 
note au passage:
1 - berk du global
2 - berk du hardcoding
 
charge tes maps à partir d'un fichier ca rox mieux :)
et évite les variables globales meme si ca se comprend que ca facilite les choses (surtout au début)
tu peux toujours te mettre à l'objet !
fait une classe globale comportant le niveau.


---------------
MOD1:
http://soj.mesdiscussions.net/foru [...] &post=4024
n°5242
Deather2
OpenBSD: the way to go!
Posté le 18-03-2005 à 21:51:15  profilanswer
 

Salut,
Merci pour ta réponse.
En gros, il faudrait que je renomme Map.h en .cpp, que je le compile avec -c, que je l'inclus pas dans les autres .cpp, mais que je déclare extern unsigned char Map1_Items[25][45]; dedans?
 
Pour l'objet, c'est aussi une bonne idée, j'y penserais.
 
Pour le fichier, c'est bien entendu prévu. ;)


Message édité par Deather2 le 18-03-2005 à 21:51:25
n°5243
Lightness1​024
Posté le 18-03-2005 à 22:20:58  profilanswer
 

c'est exactement ca. :jap:  
normalement le 'partage' se fait pendant le "linkage" donc ca marche :D
c'est prévu, c'est ce qu'on appelle la classe mémoire 'extern'.  :bounce:


---------------
MOD1:
http://soj.mesdiscussions.net/foru [...] &post=4024
n°5244
Deather2
OpenBSD: the way to go!
Posté le 18-03-2005 à 22:25:57  profilanswer
 

Bon pour récap, j'ai fais:
Map.cpp qui contient :
const unsigned char Map1[25][45]={..};
const unsigned char Original_Map1_Items[25][45]={..};
unsigned char Map1_Items[25][45];
 
qui est compilé et linké,
et Map.h qui contient:
extern const unsigned char Map1[25][45];
extern const unsigned char Original_Map1_Items[25][45];
extern unsigned char Map1_Items[25][45];
 
Et qui est inclus par tout les fichiers qui en ont besoin.
 
Malheureusement, ça merde au link. J'ai des undefined references :/
 
Merci pour ton aide :jap:


Message édité par Deather2 le 18-03-2005 à 22:27:00
n°5245
Lightness1​024
Posté le 18-03-2005 à 23:16:00  profilanswer
 

meué  [:bou le loup]  
 
alors alors, chai po trop, essaye plutot de recopier la déclaration (extern) dans tous les .cpp (zone globale).
et pas mettre de .h au module map.
 
pour voir [:cg_shadows:3]


---------------
MOD1:
http://soj.mesdiscussions.net/foru [...] &post=4024
n°5246
Deather2
OpenBSD: the way to go!
Posté le 18-03-2005 à 23:20:22  profilanswer
 

J'essaye ça

n°5247
Deadog
Dain Bramaged
Posté le 19-03-2005 à 00:29:56  profilanswer
 

ou travaille en pointeurs (alloc, tout ça ...)
 
ou mieux, des classes


Message édité par Deadog le 19-03-2005 à 00:30:24

---------------
* On sais qu'on est un ingénieur si on n'a pas de vie social et qu'on peux le prouver mathématiquement
* "pluralitas non est ponenda sine necessitate" (Les choses essentielles ne doivent pas être multipliées sans nécessité) Guillaume d'Ockham

n°5248
Deather2
OpenBSD: the way to go!
Posté le 19-03-2005 à 10:27:29  profilanswer
 

J'ai décidé de faire une classe CMap.
Merci à tous pour votre aide :jap:

mood
Google
Posté le 19-03-2005 à 10:27:29  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  [C++] Problème avec un tableau "partagé"

 

Hit Parade