[C++] organisation du prog

organisation du prog [C++] - Programmation

Marsh Posté le 14-05-2001 à 21:32:04    

lut tlm
 
voila, j'ai un (gros) problème sur l'organisation de mon prog :
 
il est composé de plusieurs fichiers (j'utilise les MFC) et je voudrai que chaque fichier puisse avoire accés a la même variable, en effet j'ai plusieurs fichier qui on besoin de savoire la valeurs de la meme variables.
 
voila comment j'ai proceder :
 
j'ai defini mes constantes et mes variables dans le fichier principale ( ex : essai.cpp) :
 
extern const unsigned short TAILLE = 10,
                            CONST2 =3000;
 
int var1;
char tab[TAILLE];
 
ensuite j'ai fais un fichier .h que j'ai integrer a chaque fichier (sauf le principal ) ex :  essaiDlg.cpp pour reprendre les MFC
 
extern const unsigned short TAILLE,
                            CONST2;
 
extern int var1;
extern char tab[TAILLE]   <= la ca bloque grave !
 
 
et voila la ligne extern char tab[TAILLE]  ne marche po, visual me dit qu'il ne peut cree le tableau car il ne connai po la taille  (enfin d'après ce que j'ai compris :) ) ca semble assez logique mais vue que j'ai po trouver de solution j'aimerais savoir comment vous proceder dans le ca ou plusieurs fichiers doivent acceder a la meme variable (en particulier un tableau, les types de base tel ke int fonctionne bien)
 
 
 :??:  :??:  :??:  :??:  :??:  :??:  :??:  :??:

Reply

Marsh Posté le 14-05-2001 à 21:32:04   

Reply

Marsh Posté le 14-05-2001 à 22:29:58    

Moi personnelement , je n'aime pas trop cette facon de programmer. Extern par ci , extern par la... moi pour partager des variables, je le fait par l'intermediaire d'une class , avec des prprietes statiques, et des observateurs sur ces proprite.  
Ainsi, lorsque je declare une instance de cette classe, je peux n'importe ou kestionner les propiete de la classe afin d'avoir les infos dont j'ai besoin...
 
Cela dit , c'est une solution comme une autre, mais bon, chacun ca facon... tout se defend !


---------------
Br@scoo...
Reply

Marsh Posté le 14-05-2001 à 22:31:55    

bien en fait, tu n'as pas le droit en C/C++ de mettre des variables (meme constante) entre les crochets d'un tableau pour definir sa taille. tout simplement parce qu'elle doit etre fixe  et c'est aussi une histoire de déclaration. Lors de la compilation, tes variables n'existent pas (meme les const) elle sont juste declarées. Hors si elles n'existent pas ton tableau ne pourra donc pas avoir de taille bien defini !
 
la solution utilisé en C pure et l'utilisation du #define
 
ex :  
#define TAILLE 15
 
extern char tab[TAILLE];
 
ton tableau sera defini avec 15 char (soit 15 octets)
 
si tu veux faire varier cette "TAILLE"
 
il va falloir allouer de la memoire dynamiquement à ton tab
 
int taille = 15;
soit char *tab = new char(taille);
soit char *tab = malloc(sizeof(char)*taille);
 
mais il faudra penser à liberer cette memoire
 
free(tab);
delete(tab);
 
suivant si tu passes par les methodes C ou C++ ..

Reply

Marsh Posté le 14-05-2001 à 23:23:09    

Dans ton fichier h ne déclare pas une deuxième fois la taille du tableau.
 
Remplace
extern char tab[TAILLE]
par
extern char tab[];

 

[edit]--Message édité par z51--[/edit]

Reply

Marsh Posté le 15-05-2001 à 09:20:44    

brascoo a écrit a écrit :

Moi personnelement , je n'aime pas trop cette facon de programmer. Extern par ci , extern par la... moi pour partager des variables, je le fait par l'intermediaire d'une class , avec des prprietes statiques, et des observateurs sur ces proprite.  
Ainsi, lorsque je declare une instance de cette classe, je peux n'importe ou kestionner les propiete de la classe afin d'avoir les infos dont j'ai besoin...
 
Cela dit , c'est une solution comme une autre, mais bon, chacun ca facon... tout se defend !




 
c a dire que tu cree une classe avec des instances declarer en statique ? mais dès que tu vas cree un nouvel objet de cette classe (je suppose que tu cree un objet pour chaque fichier, non ?) , les variables vont être reinitialisé ,non ?
ya t'il une chose special a faire dans ton constructeur ?

Reply

Sujets relatifs:

Leave a Replay

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