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

  FORUM HardWare.fr
  Programmation
  C++

  [Rayzolu] Problème de linkage à la compilation

 





Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Rayzolu] Problème de linkage à la compilation

n°1314426
vouzico
Bro Naoned e Breizh
Posté le 27-02-2006 à 15:31:32  profilanswer
 

Voilà je suis sous Visual C++ et j'ai un problème de compilation : au linkage j'ai droit à ce beau message d'erreur :
 
main.obj : error LNK2005: "private: static int Analyse::size_tab" (?size_tab@Analyse@@0HA) already defined in analyse.obj
main.obj : error LNK2005: "private: static char (* Analyse::tab_analyse)[30]" (?tab_analyse@Analyse@@0PAY0BO@DA) already defined in analyse.obj
 
J'ai cru comprendre que cette erreur est dûe à l'inclusion 2 fois du analyse.h mais je vois pas trop comment résoudre le problème.
 
analyse.h :  
 

Code :
  1. #ifndef __ANALYSE__
  2. #define __ANALYSE__
  3. #include <iostream>
  4. #include "correction.h"
  5. #define TAILLEMOT 30
  6. class Analyse : public Correction
  7. {
  8. private :
  9. static char tab_analyse [][TAILLEMOT];
  10. static int size_tab;
  11. public :
  12. Analyse (char *);
  13. ~Analyse();
  14. };
  15. char Analyse::tab_analyse [][TAILLEMOT] = {"create", "displayall", "move", "put"};
  16. int Analyse::size_tab = 4;
  17. #endif


 
correction.h :
 

Code :
  1. #ifndef __CORRECTION__
  2. #define __CORRECTION__
  3. #include <iostream>
  4. #define TAILLEMOT 30
  5. class Correction
  6. {
  7. private
  8.   char (*modele) [TAILLEMOT];
  9.   char *acomparer;
  10.   int tabsize;
  11. public :
  12.           inline int size (const char *) const;
  13.   inline bool identique (const char *,const  char *) const;
  14.   inline int comparaison (const char *,const  char *) const;
  15.   inline bool compareEqualSize (const char *, const char *) const;
  16.   inline bool compareMinusSize (const char *,const  char *) const;
  17.   inline bool comparePlusSize (const char *, const char *) const;
  18.   char* getModifiedString () const;
  19. Correction (char *param, char tabparam [][TAILLEMOT], const int size);
  20. Correction();
  21. ~Correction ();
  22. };
  23. #include "fonctions.inl"
  24. #endif


 
main.cpp :  

Code :
  1. #include <iostream.h>
  2. #include "analyse.h"
  3. #include "create.h"
  4. void main ()
  5. char param[16];
  6. char nomforme [16];
  7. char libelle[16];
  8. char couleur[16];
  9. char coordonnes [16];
  10. cout << "Veuillez entrer le nom de votre forme, le libelle de votre forme, sa couleur,";
  11.         cout << " et ses coordonnees entre parentheses et separees d'une virgule\n";
  12. cin >> param >> nomforme >> libelle >> couleur >> coordonnes;
  13.   Analyse analyse (param);
  14.   if (analyse.getModifiedString()==NULL)
  15.  cout << "Le premier mot que vous avez entre n'appartient pas au vocabulaire";
  16.                 cout << "de ce programme, veuillez modifier votre premier mot";
  17.   else
  18.   cout << "\n" << analyse.getModifiedString();
  19.   if (analyse.identique(analyse.getModifiedString(), "displayall" ))
  20.   {
  21.   cout << "\nAFFICHER TOUT"; 
  22.   }
  23. }


Message édité par vouzico le 27-02-2006 à 15:54:21
mood
Publicité
Posté le 27-02-2006 à 15:31:32  profilanswer
 

n°1314456
franceso
Posté le 27-02-2006 à 15:45:44  profilanswer
 

Citation :

J'ai cru comprendre que cette erreur est dûe à l'inclusion 2 fois du analyse.h mais je vois pas trop comment résoudre le problème.


Je ne pense pas : visiblement, tes headers sont protégés contre les inclusions multiples. En plus, si tes prototypes de classes apparaissaient plusieurs fois, ton compilateur gueulerait au moment de la compilation et n'atteindrait pas l'étape de link.

n°1314463
vouzico
Bro Naoned e Breizh
Posté le 27-02-2006 à 15:48:55  profilanswer
 

J'ai oublié de préciser que le compilo gueule plus particulièrement sur les lignes 15 et 16 de analyse.h ....


Message édité par vouzico le 27-02-2006 à 15:51:34
n°1314465
skelter
Posté le 27-02-2006 à 15:51:19  profilanswer
 

voila ce qui arrive quand on mets des definitions dans un en-tete, faut les mettres dans un .cpp

n°1314469
vouzico
Bro Naoned e Breizh
Posté le 27-02-2006 à 15:53:27  profilanswer
 

skelter a écrit :

voila ce qui arrive quand on mets des definitions dans un en-tete, faut les mettres dans un .cpp


 
Effectivement  
 
Merci bien :jap:

n°1314474
franceso
Posté le 27-02-2006 à 15:55:36  profilanswer
 

les définitions de Analyse::size_tab et Analyse::tab_analyse sont compilées une fois dans analyse.obj et une autre fois dans main.obj. Du coup, le linker se retrouve avec deux versions de la même variable.
 
Il faut que tes définitions n'apparaissent pas dans le header, mais dans l'un (et seulement un) des deux .cpp

n°1314476
ParadoX
Posté le 27-02-2006 à 15:56:08  profilanswer
 

vouzico a écrit :

Effectivement  
 
Merci bien :jap:


 
Maykelboulay [:ddr555]


Message édité par ParadoX le 27-02-2006 à 15:56:24

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt

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

  [Rayzolu] Problème de linkage à la compilation

 

Sujets relatifs
[JAVA][JXTA] installation et compilationProbleme avec header
Probléme d'acquisition d'image.Problème de requete
Problème avec memory_limit de PHP.iniProblème lors de l'éxécution de rquête dans un formulaire
Problème de fromulaire et de boutonsProblème de n° d'index des feuilles Excel créées en VBA
probleme layer[flash] probleme de liens
Plus de sujets relatifs à : [Rayzolu] Problème de linkage à la compilation


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