Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2414 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pb de linkage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb de linkage

n°2021806
lezeb2000
Posté le 08-09-2010 à 11:10:28  profilanswer
 

Bonjour,
j'essaie pour la premiere fois de compiler en même temps plusieurs fichiers (un cpp par classe et un header), mais j'ai un soucis que je ne sais pas résoudre.
 
J'ai pour faire un test rapide une fonction globale appellée "load_image", que j'ai placé dans config.h qui contient aussi mes constantes
Mon fichier main inclu config.h
Mon fichier tileset.cpp pareil
 
Tous mes fichiers compilent bien, mais au niveau des liens j'ai l'erreur suivante :
Code :
 
1>TilesLayer.obj : error LNK2005: "struct SDL_Surface * __cdecl load_image(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > )" (?load_image@@YAPAUSDL_Surface@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) déjà défini(e) dans main.obj
 
que je ne comprend pas trop : a priori j'ai mis des "ifndef .... endif" dans mes includes, donc je comprend pas trop pourquoi est-ce que ma fonction veut se redéfinir à 2 endroits différents.
Bien sûr si je n'inclut plus config.h dans mon 2eme fichier, la compilation ne marche plus....
Une idée?

mood
Publicité
Posté le 08-09-2010 à 11:10:28  profilanswer
 

n°2021808
theshockwa​ve
I work at a firm named Koslow
Posté le 08-09-2010 à 11:32:32  profilanswer
 

si ta fonction est définie dans le header, tu peux éventuellement la marquer inline.
 
Montre nous tes fichiers, ce sera plus simple pour cerner le souci


---------------
last.fm
n°2021809
lezeb2000
Posté le 08-09-2010 à 11:35:29  profilanswer
 

Sous quelle forme? J'ai une 10aine de (petits) fichiers en tout, c'est pour ça que je vous ai épargné un copier/coller
  Je pense que je vous mettrai tout ça dans un RAR ce soir (je suis pas sur mon PC là)

n°2021810
olivthill
Posté le 08-09-2010 à 11:39:18  profilanswer
 

"load_image" est un nom assez banal, qui a peut-être été employé en deux endroits, mais pour faire des choses différentes, créant ainsi une possible ambiguité, qui pourrait peut-être être lévée par un choix d'un autre nom de fonction, ou par la spécification d'un namespace.

n°2021815
lezeb2000
Posté le 08-09-2010 à 11:56:50  profilanswer
 

olivthill a écrit :

"load_image" est un nom assez banal, qui a peut-être été employé en deux endroits, mais pour faire des choses différentes, créant ainsi une possible ambiguité, qui pourrait peut-être être lévée par un choix d'un autre nom de fonction, ou par la spécification d'un namespace.


Je pense pas vu qu'à la base j'avais tout dans 1 seul fichier et que ça compillait très bien
En fait je crois que c'est parce que j'ai le corps de ma fonction load_image dans config.h, mais je comprends toujours pas pourquoi ça marche pas d

n°2021816
theshockwa​ve
I work at a firm named Koslow
Posté le 08-09-2010 à 12:05:34  profilanswer
 

mets juste la déclaration de ta fonction dans config.h (mauvais choix de nom au passage) et le corps dans un fichier .cpp
Mettre le corps des fonctions dans les .h ne se justifie que pour les fonctions qui vont être inlinées ou pour les fonctions template


---------------
last.fm
n°2021834
h3bus
Troll Inside
Posté le 08-09-2010 à 13:39:02  profilanswer
 

Je confirme ce que dit theshockwave.

 

Même si tu as mis les protections #ifndef dans ton header, si deux cpp font appel à ton header, ta fonction load_image se trouvera définie deux fois.
Le #define n'est pas conservé entre deux compilations successives, son scope est borné à son fichier et aux fichiers qui l'incluent.


Message édité par h3bus le 08-09-2010 à 13:39:40

---------------
sheep++
n°2021838
lezeb2000
Posté le 08-09-2010 à 13:53:11  profilanswer
 

Du coup comment est récupéré le corps de ma fonction load_image? Car à un moment il faut connaitre plus que son prototype

n°2021839
theshockwa​ve
I work at a firm named Koslow
Posté le 08-09-2010 à 13:57:59  profilanswer
 

c'est justement le link qui fait le lien ... d'où le nom.
 
dans tes unités de compilation (les fichiers générés à partir de tes .c ou .cpp) il y a des symboles qui sont marqués comme internes (où le corps est présent dans l'unité) et d'autres symboles qui sont marqués externes. La résolution des symboles externes est faite lors du link.


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pb de linkage

 

Sujets relatifs
Pb aléatoires de liensPb de méthode virtuelle sur Interface
VBA - Userform - Pb de superposition des images et des labelsPb Numérotation automatique sur modèle Excel
PB affichage requete dans PHPPB création et utilisation VAR environement.
PHP Pb de sortie de bouclePb Latest Post Jquery
Petite image déco en arrière-plan -> positionnement ?Pb hero slide jquery images
Plus de sujets relatifs à : Pb de linkage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR