Comme le dit le titre, je tombe sur une erreur de compilation que je comprends pas:
PS C:\Users\tiwab\Documents\cpp_projects\Simplexe> g++ Simplexe/*.cpp
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\tiwab\AppData\Local\Temp\ccx3YZkJ.o:Simplexe.cpp:(.text+0x0): multiple definition of `checkSubAdvance()'; C:\Users\tiwab\AppData\Local\Temp\ccCmuh8V.o:main.cpp:(.text+0x0): first
defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\tiwab\AppData\Local\Temp\ccx3YZkJ.o:Simplexe.cpp:(.bss+0x0): multiple definition of `sub_step'; C:\Users\tiwab\AppData\Local\Temp\ccCmuh8V.o:main.cpp:(.bss+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
J'ai défini une fonction checkSubAdvance() dans un fichier d'entete pour pourvoir d'une certaine manière "déboguer" mon code:
// Fichier Simplexe.hpp
// A la fin du fichier, apres la declaration de la classe Simplexe et de ses attributs et methodes.
// J'appelle cette fonction dans Simplexe.cpp, meme en retirant les lignes ou je l'appelle, la mm erreur survient
int sub_step{0};
void checkSubAdvance()
{
std::cout << "\nReached sub-step " << sub_step << std::endl;
++sub_step;
}
Une fonction (et tout en C++, en fait) peut être déclarée plusieurs fois, mais défini qu'une seule fois (ODR = one definition rule).
// un déclaration de fonction
void foo();
// une définition de fonction
void foo()
{
...
}
Quand tu mets ta définition de fonction dans le header et que ton header est inclue dans 2 fichiers source, alors tu vas avoir 2 copies de ta definition de fonction et donc non respect de l'ODR.
Je comprend pas ton histoire de déboguer. Donc la meilleure correction a faire, c'est de déplacer ta définition dans un fichier source et d'avoir que la déclaration dans le header.
Si tu veux quand meme garder ta definition de fonction dans le header (mais sache que je te regarde avec un regard severe dans ce cas), tu dois ajouter inline ou static.
Merci j'ai défini la fonction dans Simplexe.cpp et tout marche maintenant. Sinon déboguer ici pour moi c'est connaitre d'où vient l'erreur. Mon code signale des erreurs et je connais pas quelle fonction appelle la fonction soulevant l'erreur. J'affiche donc des messages un peu de partout dans le code pour connaitre ou l'arret c'est fait...assert() est tres brute
Comme ton code ne compilait pas, on ne voyait pas pourquoi tu parlais de debugger. En effet, un debugger te permettra d'y voir plus clair. Tu as raison.
Tu es sous Windows et as choisi de travailler sous MSYS plutôt que les outils Visual qui sont nettement plus confortable pour le debug. Dommage moi je ne peux pas vraiment t'aider dans cet environnement.
Je suis bien sur VSCode mais j'arrive pas a déboguer comme je veux. J'ai des assert() dans des définitions de fonctions et quand une erreur est soulevée le debogueur vscode me dit rien sur la fonction appelée la fonction qui soulève l'erreur par exemple. J'affiche donc des messages pour mieux voir la source
Autrefois, on n'avais pas de debugger et on se débrouillait avec les affichages. Affiches avant et après chaque fonction majeure, puis va à l'intérieur, etc. C'est ce que j'appelle du debugging dichotomique.
Le Tout est souvent plus grand que la somme de ses parties.
Erreur inconnue a la compilation
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
En recherche d'emploi.
Le Tout est souvent plus grand que la somme de ses parties.