Problème: Variable globale

Problème: Variable globale - C++ - Programmation

Marsh Posté le 01-06-2006 à 11:57:57    

Hello,
 
On m'a tellement répété de pas me servir des variables globales que j'arrive même pas à faire un truc tout con... En fait j'aimerais simplement définir une instance de ofstream dans un .hpp, et après pouvoir m'en servir dans l'ensemble des fichiers qui include ce hpp. Le problème c'est que ça déconne à l'édition des liens vu que chaque fichier qui inclut le .hpp définit cette variable (ce qui est normal tout de même !). J'avais essayé via le mot clé static, mais apparemment y'a un instance pour chaque fichier incluant le .hpp....
Donc voila, y'a t'il une solution *magique* pour que ça passe à l'édition des liens, et que l'instance manipulée soit la même partout ?  
Merci d'avance !!

Reply

Marsh Posté le 01-06-2006 à 11:57:57   

Reply

Marsh Posté le 01-06-2006 à 11:59:14    

la solution : le pattern Singleton

Reply

Marsh Posté le 01-06-2006 à 12:10:28    

Et c'est possible de réaliser ça sans implémenter une nouvelle classe ?

Reply

Marsh Posté le 01-06-2006 à 12:22:45    

c'est normal, pourquoi tu definis un truc plusieurs fois alors qu'il ne doit l'etre qu'une fois (erreur à l'edition des lien) ? et pourquoi tu specifie static en global un objet (non constant) que tu veux unique pour chaque source ?
Aussi l'utilisation de static en dehors d'une fonction est depreciee, tu peux utiliser un namespace anonyme qui est semantiquement equivalent
 
La solution c'est de ne mettre qu'une definition (dans un source) et de mettre la declaration dans un header.
 

Code :
  1. // header
  2. extern std::ofstream file;
  3. // source
  4. std::ofstream file(...);


 
 

Reply

Marsh Posté le 01-06-2006 à 15:18:04    

C'est bon j'ai essayé et ça marche!  J'y vois un peu plus clair avec les globales now, merci beaucoup.

Reply

Marsh Posté le 14-05-2009 à 11:09:30    

Petit déterrage, j'ai moi aussi un souci avec des variables globales. On trouve des solutions diverses et variées, j'ai choisi la suivante qui ne fonctionne pas visiblement :
 - dans un .h, je déclare "extern int toto;"
 - dans un des .cpp, j'inclus le .h en question et je définis la variable "int toto = 300;"
 - dans les autres .cpp, j'inclus également le .h
mais là problème, à la compilation, j'obtiens des "undefined reference to toto" dans tous ces autres .cpp.
 
Une explication ?

Reply

Marsh Posté le 14-05-2009 à 11:19:58    

pas utilisé de globale :/
on fait de l'objet punaise ...

Reply

Marsh Posté le 14-05-2009 à 11:20:41    

Certes mais admettons que j'ai quand même envie de me servir d'une variable globale ? :o

Reply

Marsh Posté le 14-05-2009 à 11:21:14    

c'ets pour faire quoi ?
 
Une globale, c'ets l'aveu d'un échec de design propre. Donc explique à quoi elle te sert et on va t'expliquer comment faire autrement

Reply

Marsh Posté le 14-05-2009 à 11:24:40    

C'est un code de simulation et mon maillage (initialisé au début de la simu et jamais modifié ensuite) a certaines caractéristiques : nombre de mailles, pas en espace, type de condition de bord, etc. Bref, y en a toute une tripotée. Et il se trouve que chaque fonction a besoin de connaître chacune de ces caractéristiques. Et donc ça m'emmerde de les passer en argument.

Reply

Marsh Posté le 14-05-2009 à 11:24:40   

Reply

Marsh Posté le 14-05-2009 à 11:29:33    

bah tu fais une classe parametres qui contient ça et s'iunitialise prorpement au debut de ton main et que tu passes en seul argument de tes classes.

Reply

Marsh Posté le 14-05-2009 à 11:32:21    

Et y a pas moyen d'éviter de passer systématiquement une instance de cette classe en argument ?

Reply

Marsh Posté le 14-05-2009 à 13:35:26    

singleton mais ça sert à rien :¶

Reply

Sujets relatifs:

Leave a Replay

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