[C++] erreure definitions multiples

Résolu/Fermé
Wazza6 Messages postés 180 Date d'inscription lundi 31 décembre 2007 Statut Membre Dernière intervention 21 juillet 2012 - Modifié par Wazza6 le 25/08/2010 à 03:01
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 25 août 2010 à 08:18
Bonjour,

J'essaie de compiler un programme que je viens de terminer, mais je reçois les erreures suivantes:

C:\Users\Gabriel\Documents\Programming\TruthOrDare\main.cpp|25|multiple definition of '_main'| obj\Debug\main.o:

C:\Users\Gabriel\Documents\Programming\TruthOrDare\main.cpp|25|first defined here|

Pour chaque fonction dans mon main.cpp

Je devine que mon main.cpp est inclu en boucle,je l'ai inclu dans game.cpp pour avoir access a mes variables globales (ne me dites pas de ne pas les utiliser parceque[...], je sais) , mais j'ai essayé d'éviter ça en utilisant #ifndef.

Voici les parties les plus importantes de mon code (le code complet est trop long)
main.cpp
#ifndef MAIN_CPP  
#define MAIN_CPP  
#include <iostream>  
#include <fstream>  
#include <windows.h>  
#include <vector>  
#include <string>  

#define FILE_TRUTH   "data/config/truth.dat"  
#define FILE_DARES   "data/config/dare.dat"  
#define FILE_DARES_D "data/config/dare_dirty.dat"  

using namespace std;  
bool dirty;  
extern vector<string> truths;  
extern vector<string> dares;  
extern string *names;  


#include "main.h"  
#include "game.h"  

int main()  
{  
...  
}  
#endif  

game.cpp
#ifndef _GAME_CPP  
#define _GAME_CPP  
#include "game.h"  
#include <windows.h>  
#include <conio.h>  
#include <string.h>  
#include "main.cpp"  

int size_dares;  
int size_truths;  
int game(int players)  
{  
...  
}  
#endif


main.h et game.g ne contiennent que des declarations, mais si elles peuvent aider les voici:
game.h
#ifndef GAME_H  
#define GAME_H  


int game(int);  

#endif  


main.h
#ifndef GAME_H  
#define GAME_H  


int game(int);  

#endif  


Est-ce que quelqu'un sait comment régler ce probleme?
Merci d'avance.


Regardez ma devise!

2 réponses

Wazza6 Messages postés 180 Date d'inscription lundi 31 décembre 2007 Statut Membre Dernière intervention 21 juillet 2012 40
25 août 2010 à 03:26
OK, j'ai mis les declarations des variables globales dans main.h, mais maintenant les fonctions de main.cpp n'y ont pas accès, j'ai verifié et main.h est inclu dans main.cpp. Et j'ai ajouté extern devant, ca donne
extern vector<string> truths;
...

Qe'est-ce que je peux faire?
0
Wazza6 Messages postés 180 Date d'inscription lundi 31 décembre 2007 Statut Membre Dernière intervention 21 juillet 2012 40
25 août 2010 à 03:55
ok j'ai reusssi...
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
25 août 2010 à 08:18
Salut.
Plus que l'utilisation des variables globales, ce que je critiquerais ici, c'est l'inclusion de .cpp.
Je pense que tu as trouvé la bonne manière d'utiliser des variables globales : les mettre dans un vrai .h avec extern devant et les déclarer sans extern dans un .cpp.
Le problème que tu as ici, c'est que la plupart du temps, les compilateurs compile tout les .cpp, donc ici main.cpp et game.cpp, seulement ces deux unités de compilation contienent la fonction main() (puisque tu l'inclus dans game.cpp), d'où erreur lors de l'édition des liens.
0