[VC++] problème avec projet contenant plusieurs fichier .C

problème avec projet contenant plusieurs fichier .C [VC++] - C++ - Programmation

Marsh Posté le 29-04-2002 à 17:03:53    

Salut à tous;
J'ai un problème pour faire comprendre à ce logiciel à la con  :gun: qu'une des fonctions de mon programme se trouve sur un autre fichier :
j'ai 2 fichiers .C avec 2 fichiers .H
Dans le premier .C qui contient Main(), j'appelle une fonction qui se trouve sur le 2ème fichier .C :sarcastic:  
Les includes du premier comprennent les .H des autres fichiers (il y en aura plus que 2...) mais, même s'il n'y a aucune erreur de programmation, VC++ me dit :"PacMania-Like.obj : error LNK2001: unresolved external symbol _Tab_Affich" ??? :pt1cable: Pourtant, des fois ça marche !?! C'est aberrant et je trouve plus de solutions. Pourquoi le Link me dit qu'il peut pas trouver la fonction, alors qu'elle est déclarée et définie de manière correcte ???
Aidez-moi SVP  :sweat:

Reply

Marsh Posté le 29-04-2002 à 17:03:53   

Reply

Marsh Posté le 30-04-2002 à 09:27:39    

Dans les fichiers .H, les fonctions sont définies "naturellement" ? Si oui, quand il compile un module .CPP, le compilo pense que les fonctions sont toutes dans le module courant. Idem pour le second.
Quand il veut faire l'édition de lien, il a du mal à trouver les fonctions (elles ne sont pas dans le module où elles devraient être). Sous BC, ça marchouille des fois mais souvent le lieur rouspète (du genre que les fonctions sont dupliquées).
 
Ce que je fais dans mes projets (c'est de l'observation de code Krosoft et du try and fail/succeed)
 
dans le fichier AAAA.C
j'inclus les prototypes de fonctions locales à AA.C au début et je met un #define AAAA (pr l'exemple) au début, et #include "BBBB.H"
dans le fichier BBBB.C
idem avec #define BBBB (idem, pr situer les idées) et #include "AAAA.H"
 
A part des variables partagées, dans BBBB.H, je met
les prototypes des fonctions de AAAA.C qui servent à BBBB.C avec le mot clé "extern" devant genre
extern main(void)
et de même pour l'autre
 
Ca permet au compilo de savoir comment son définies les fonctions externes, de savoir qu'il n'a pas besoin de les chercher dans le module courant et qu'il les trouvera (en externe) pour les lier.
 
Si on a des variables partagées, on peut les mettre da
 
le fichier AAAA.H comporte

Reply

Marsh Posté le 30-04-2002 à 09:33:23    

Fausse manoeuvre.
 
Si des variables sont partagées, on peut utiliser, dans les fichiers .H des tests
#ifdef AAAA
int machin;
int bidule;
BOOL truc;
#else
extern int machin;
extern int bidule;
extern BOOL truc;
#endif
 
Ca permet d'empêcher le compilo de dire que les variables sont définies deux fois (au cas où on a besoin de AAAA.H et BBBB.H dans chaque fichier .C(PP)).
Quand il compile AAAA.C, vu que la variable AAAA est définie (sans valeur (0), elle existe), il ne considère que ce qui est dans la section #ifdef
 
Si on a plus d'un fichier mais avec variables partagées, on peut retrouver, pour tous les autres, les  
extern int machin;
extern int bidule;
extern BOOL truc;
vu que ces variables sont définies dans AAAA.H via AAAA.C
 
J'espère ne pas être trop confus. :)  
J'ai pas mal galéré avec ce genre de pb au début (autodidacte rameur :D).

Reply

Sujets relatifs:

Leave a Replay

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