Compilation des .h

Résolu
jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 - 9 févr. 2008 à 18:35
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 10 févr. 2008 à 15:08
Bonjour.
Voila mon probleme : j'ai écrit peut être 6 ou 7 classes différentes dans des fichiers .h (et pas juste les prototypes / déclarations, mais aussi le code) et je n'ai donc aucun *.cpp à part main.cpp où tout au début je fais include #"....h" pour chacun des fichiers.
Ca marche, mais j'aimerais quand meme comprendre ce qu'il faut faire pour que ca marche avec d'un coté le .h et de l'autre le cpp.
Il faut savoir que les .h sont tous plus ou moins reliés, puisqu'il y a des classes virtuelles/interfaces, et d'autres qui dérivent.

Un autre probleme est aussi que j'ai une classe A, dont dérivent B et C, et que B peut avoir besoin de créer des objets C et C des objets B. MAis comme il faut bien faire un include avant l'autre, ca passe pas.

Merci d'avance de me répondre.
A+.
Thomas.

5 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 févr. 2008 à 19:00
Tout d'abord, il ne faut surtout pas mettre le code dans le .h
Il le mettre dans le .cpp et les définitions (variables, structures (struct & classes), #define & co., ...) dans le .h
Ensuite, dans chaque fichier .cpp qui a besoin de cela, il suffit de faire #include "leh.h" et tout ira bien.
Si tu fais une classe qui hérite d'une autre, même chose : tu inclus le .h de la classe.
J'espère t'avoir éclairé
_______________________________________________________________________
VB.NETis good ...VB6is better
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 févr. 2008 à 22:18
Pour être précis, les définitions se font dans un .cpp, ce sont les déclarations qui se font dans le .h.
Mais l'inverse est tout a fait possible : on peut mettre du code dans des .h, c'est même nécessaire dans le cas des classes templates, et c'est judicieux pour les méthodes simples qui seront inlinées.
Pour les problèmes de dépendances en les classes B et C, il suffit de juste inclure C.h dans B.cpp et B.h dans C.cpp.
Si tu as besoin de C dans B.h et de B dans C.h, tu peux effectuer une simple déclaration de la classe C dans B.h (ou l'inverse).

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 1
10 févr. 2008 à 14:45
Ca marche presque mais c'est quand meme très compliqué à gérer, car le compilateur me crée beaucoup d'erreurs (en fait, aucune erreur à la compilation, mais des erreurs à la phase "build"), en particulier il me dit qu'il y a des redéfinitions de classe.
c'est possible de vous envoyer le code ? il ne reste qu'une erreur impossible à déceler vu qu'elle est là au build mais pas a la compilation
merci
Thomas
0
jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 1
10 févr. 2008 à 14:53
ah non finalement c'est bon !
désolé
mais c'est quand meme pas
aussi simple que c'est décrit dans les livres, dès qu'on a plusieurs
classes imbriquées et que plusieurs classes sont partagées.

en
fait, si la classe a nécessite la classe b (même dans les arguments des
fonctions) et bien chose étrange, il faut inclure "b.h" dans a.cpp et
non pas dans a.h (ce que disait vecchio56)
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
10 févr. 2008 à 15:08
Si a.cpp inclut a.h et a.h inclut b.h, c'est pareil que d'inclure b.h dans a.cpp (au problèmes de dépendances près, qui veut rendre impossible certaines inclusions dans les .h)

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Rejoignez-nous