xbabilone
Messages postés47Date d'inscriptionvendredi 18 février 2005StatutMembreDernière intervention 7 janvier 2018
-
Modifié par cptpingu le 21/01/2015 à 11:18
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
21 janv. 2015 à 22:59
Bonjour à tous et bonne année.
J'ai g++ qui se plaint de multiples definitions.
La solution est certainement simple mais je ne la vois pas.
J'ai une classe déclarée dans un fichier .hpp ;
class.hpp
J'ai ma classe définie dans un fichier .cc qui appelle mon fichier class.hpp
Dans mon projet, j'appelle aussi mon fichier class.hpp
Je me retrouve avec un message d'erreur qui me parle de multiples declarations sur tous les termes de ma classe, du genre:
/tmp/ccYSzI7u.o: dans la fonction « CString::toLowerCase() »: main.cc:(.text+0x26c0): définitions multiples de « CString::toLowerCase() » /tmp/ccrhWEf7.o:Hash.cc:(.text+0x26c0): défini pour la première fois ici
Je n'avais pas ce problème quand j'avais la définition et la déclaration dans le même fichier
Alors quelle stratégie adopter pour avoir l'air sérieux, et garder un fichier .hpp et un fichier .cpp ?
Edit admin: correction orthographe, mise en forme, coloration.
$ g++ -W -Wall MyClass.cc main.cc
/tmp/ccX7G63J.o:(.data+0x0): définitions multiples de « ready »
/tmp/ccCSqaPw.o:(.data+0x0): défini pour la première fois ici
collect2: error: ld returned 1 exit status
Je t'ai fait un exemple avec ma variable ready .
Je cherche a regler le probleme quand il y a surtout une classe complete
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 21 janv. 2015 à 22:59
Pense à la coloration syntaxique, s'il te plaît. Ce n'est pas la première fois et c'est très désagréable à relire :(
Pour ton souci, c'est normal. "bool ready=true;" est du code, tandis que "bool ready;" est une déclaration. Donc l'un peut aller dans un header et pas l'autre. Il te faut donc faire:
Dans ton header:
bool ready;
Dans un fichier de code à part:
bool ready=true;
Et ça devrait être bon. Néanmoins je te déconseille fortement l'utilisation de variables globales (signe d'un code pourri :p).