Variables accessibles dans plusieurs fichiers

Variables accessibles dans plusieurs fichiers - C++ - Programmation

Marsh Posté le 21-05-2005 à 19:27:02    

Bonjour,
 
Je suis en train de faire un projet d'info, et j'aimerais avoir 2 variables (unsigned int) qui sont accessibles dans plusieurs fichiers :
 
J'ai plusieurs couples de .cc et .h qui contiennent chacun une classe, et j'aurais besoin que ces  2 variables soient accessibles partout. J'ai essayé avec un namespace dans un fichier dimensions.h (entouré de #ifndef _DIMENSIONS_H #define _DIMENSIONS_H #endif), et #include "dimensions.h" chaque fois que j'en ai besoin, mais ça ne semble pas fonctionner, le compilateur m'insulte comme quoi je redéfinis plusieurs fois les mêmes membres du namespace.
 
Je ne sais pas si l'idée du namespace est bonne, ou si il y a quelque chose d'autre de plus propre et plus efficace.
 
Merci d'avance pour votre aide !

Reply

Marsh Posté le 21-05-2005 à 19:27:02   

Reply

Marsh Posté le 22-05-2005 à 00:15:06    

Hum j'ai peut-être pas été très clair...
 
Ce que je voudrais en fait ça serait avoir une variable qui soit comme M_PI :
 
Je fais #include "kkchose.h" (<cmath> pour M_PI)
 
et après dans le code les variables hauteur et largeur (M_PI) font référence à ce qui est contenu
dans "kkchose.h"
 
Si en plus il est possible de modifier ces 2 variables c'est encore mieux, mais c'est pas vital
 
Bonne soirée, A+

Reply

Marsh Posté le 22-05-2005 à 08:28:26    

Si j'ai bien compris il suffit de définir ta variable une seule fois en globale dans un des fichiers.c, de la déclarer en extern dans un .h qui sera inclu dans les .c qui en ont besoin.
Maintenant c'est très bourrin ... peut-être que tu peux mettre cette variable dans un classe et la rendre accessible via un accesseur ( pas sûr que ça soit très français ça ... ;))

Reply

Marsh Posté le 22-05-2005 à 12:33:10    

On doit d'ailleurs pouvoir appliquer ça à un namespace j'imagine, pas essayé ...

Reply

Marsh Posté le 22-05-2005 à 12:43:49    

<cmath> pour M_PI
 
M_PI n'est pas standard, ne t'attend pas à trouver M_PI dans tous les cmath

Reply

Marsh Posté le 22-05-2005 à 13:11:12    

T'as rajouté le mot-clef const ?
 
(si j'ai bien compris ce que tu veux faire)

Reply

Marsh Posté le 22-05-2005 à 13:29:37    

Bin en fait justement pas de const, parce que j'aimerais pouvoir modifié ces valeurs...
 
Là je suis en train de me dire que je pourrais faire une classe parce que j'ai une fonction qui va avec les dimensions (qui regarde si une position donnée est dans le monde). C'est possible de déclarer une instance de classe dans un .cc juste après sa déclaration ?
 
Je vais essayer ça...

Reply

Marsh Posté le 22-05-2005 à 13:58:29    

"Déclaration" ? Tu veux dire class maClass; ?
La réponse est non, mais tu peux avoir un pointeur sur un objet de cette class dans ce cas.
 
Sinon "définition" : class maClass {/* tout ce dont ta class a besoin ici */};
Dans ce cas là c'est bon.
 
Petit rappel :
Une "définition" de class peut être dans un .h.
Tu peux définir ce que contient la class (fonction, variables, ...) dans un .cc ou directement dans ta class pour les fonctions (dans ce cas là les fonctions seront inline).

Reply

Marsh Posté le 22-05-2005 à 14:09:03    

ok mais je parlais d'une instance de classe  ;)
 
voilà mon dimensions.h :
 
#ifndef _DIMENSIONS2_H
#define _DIMENSIONS2_H
 
class Dimensions
{
        // on choisit que le monde va de 0 à largeur sur x et de 0 à hauteur sur y
public:
        Dimensions(unsigned int x1 = 500, unsigned int y1 = 500);
        bool dansMonde(int x, int y);
        void setLargeur(unsigned int x);
        void setHauteur(unsigned int y);
private:
        unsigned int largeur; // sur l axe X
        unsigned int hauteur; // sur l axe Y
};
 
Dimensions dimensions;
 
#endif
 
il y aussi le .cc qui contient le corps des fonctions. Quand j'ai besoin d'utiliser l'instance dimensions, je fais simplement un "#include "dimensions2.h" et après il est tout à fait possible de faire dimensions.dansMonde(2,4) où dimensions est l'instance initialisé dans dimensions2.h
 
Je peux compiler dimensions2.cc en .o sans problèmes, mais j'ai un problème quand je linke tout mes fichiers .o  (plusieurs fichiers ont besoin de l'instance dimensions. Je cherche un moyen de copier-coller le message d'erreur (je compile sous cygwin) et je le poste.


Message édité par Xixor le 22-05-2005 à 14:09:53
Reply

Marsh Posté le 22-05-2005 à 14:19:54    

Ah non ça non plus tu n'as pas le droit de le faire.
Si tu as besoin d'avoir une instance globale :
extern Dimensions dimensions;
à la place de :
Dimensions dimensions;
 
et défini dimensions dans ton .cc :
Dimensions dimensions;

Reply

Marsh Posté le 22-05-2005 à 14:19:54   

Reply

Marsh Posté le 22-05-2005 à 14:29:16    

Merci beaucoup !  
Ca marche !!!
 
J'ai mis "extern Dimensions dimensions;" dans le .cc et rien dans ce genre pour le .h et ça marche !!! c'est cool !
 
A+

Reply

Marsh Posté le 22-05-2005 à 14:35:36    

Ah non en fait il fallait metre extern Dimensions dimensions;  
dans le .cc et le .h

Reply

Marsh Posté le 22-05-2005 à 14:38:54    

Mais non c'est extern Dimensions dimensions; dans le .h et Dimensions dimensions; dans le .cc (un seul .cc bien sûr).
Et ne pas oublier te tout recompiler.

Reply

Marsh Posté le 22-05-2005 à 14:46:50    

ok effectivement ça marche mieux comme ça ;)

Reply

Sujets relatifs:

Leave a Replay

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