Aide include

cs_Dalamar Messages postés 63 Date d'inscription samedi 22 décembre 2001 Statut Membre Dernière intervention 22 décembre 2003 - 27 avril 2003 à 16:09
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 28 avril 2003 à 07:44
Je travaille sur un petit jeu et j,ai plusieurs fichiers .h. Je suis obligé d'en inclure plusieurs dans les autres fichiers, bref, chaque fichier dépend d'autres (tout est mélangé). Quand je veux compiler, j,ai plein d'erreurs "redefinition of xxx class". Comment je peux régler ce problème? Merci

D.a.l.a.m.a.r

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 avril 2003 à 16:16
t'as bien mis dans les .h
tout en haut
#ifndef NOMCLASSE_H
#define NOMCLASSE_H
// lignes definition de classe
tout en bas
#endif
BruNews, ciao...
0
cs_Dalamar Messages postés 63 Date d'inscription samedi 22 décembre 2001 Statut Membre Dernière intervention 22 décembre 2003
27 avril 2003 à 16:22
Merci pour ta réponse BruNews mais je ne connais pas bien les:

#ifndef NOMCLASSE_H
#define NOMCLASSE_H
// lignes definition de classe
tout en bas
#endif

Pourrais-tu m'expliquer leur fonctionnement?

merci!

D.a.l.a.m.a.r
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 avril 2003 à 16:27
Fais exactement ce qui est mis.
Si tu as une classe "ducon" alors le .h
tout en haut
#ifndef DUCON_H
#define DUCON_H
// reste du fichier
// lignes definition de classe
tout en bas
#endif
BruNews, ciao...
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
27 avril 2003 à 20:32
hum, les truc du genre
#ifndef ....
#define ...
sont qu'assez rarement indispensable, c'est d'ailleur assez souvent utilisé a tord a mon avis et est même des fois signe d'un programmation peut organisée.
La solution pour résoudre ce problème et de créer un makefile, je pense que l'on devrait toujours utiliser un makefile pour les projet possedant plus d'un fichier. Il évitera les problème de dépendances et les redéfinition, avec lui pas desoins de faire pleins de #ifndef ....
#define ... qui alourdissent le code (en général).
Pour programmer proprement utilise les .h pour y mettre la déclaration de tes classes, et le .cpp pour définir les différentes fonctions.
Si tu ne sais pas comment procéder pour faire un makefile réponds a ce msg.
Alé, bonne prog.
A+.
Bouba
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Dalamar Messages postés 63 Date d'inscription samedi 22 décembre 2001 Statut Membre Dernière intervention 22 décembre 2003
27 avril 2003 à 23:11
Merci du bon conseil Bouba! Mais je n'ai aucune idée comment procéder pour faire un makefile. Si tu pouvais m'aider... MeRcI !!!!

D.a.l.a.m.a.R
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
28 avril 2003 à 07:44
Bon, alors je ne sais pas kel compilateur tu as, je te donne un exemple avec trois fichier.
// Premier.h
class Premier
{
....
};

// Premier.cpp
#include "Premier.h"
......
//définition des fonctions de la classe Premier

//main.cpp
#include "Premier.h"
int main()
{
Premier P;
....;
return 0;
}

Voilà, pour trois fichier le makefile me donnera donc
(Le numéro des lignes ne doit pas apparaître)

1.Prog: main.obj Premier.obj
2. bcc32 main.obj Premier.obj
3.main.obj: main.cpp Premier.h
4. bcc32 -c main.cpp
5.Premier.obj: Premier.cpp Premier.h
6. bcc32 -c Premier.cpp

Bon, alors la ligne 6 compile Premier.cpp, la ligne 6 indique ces dépendances, c'est a dire que pour compiler on a besoins de Premier.cpp et Premier.h. Si par exemple on avait une autre classe Second et que premier.h aurait un #include "Second.h" dans son fichier on aurait ceci

1.Prog: main.obj Premier.obj Second.obj
2. bcc32 main.obj Premier.obj Second.obj
3.main.obj: main.cpp Premier.h Second.h
4. bcc32 -c main.cpp
5.Premier.obj: Premier.cpp Premier.h Second.h
6. bcc32 -c Premier.cpp
7.Second.obj: Second.cpp Second.h
6. bcc32 -c Second.cpp

(Bien sur il faudra remplacer bcc32 par le nom de ton compilateur, l'option -c change peut-être aussi)
Voila, pour le main en général (à la ligne 3) on met tous les .h car il inclue par l'intermédiaire des autres fichiers les autres .h.
L'avantage du Makefile est qu'il ne va pas recompiler tout le code mais seulement celui qui change, ce qui va permettre d'aller plus vite.
Tu peux ajouter des commande du DOS (sous Win) et Unix (sous Unix)

par exemple on rajoute
8. clean:
9. rm *.o // efface tous les .o sous UNIX

et en faisant "make clean" ca fé l'oppération souhaité.
Ca a aussi un avantage, ca évite d'avoir a retaper tout une ligne qui indique la compilation du prog.
Bon ton fichier doit s'appeler "makefile" et pour le lancer on fait "make" ou bien il prend un autre nom et pour le lancer on fait "make Nomfichier" mais je suis plus trop sur pour ca.
Si tu as encore des problèmes indique moi kel est le compilateur que tu utilises et envoi moi le code source, je te renverrai peut-être le makefile (si je conné un peut ton compilo).

Alé,A+.
Bouba
0
Rejoignez-nous