jannoman
Messages postés256Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention20 février 2008
-
9 févr. 2008 à 18:35
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 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.
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 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
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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).
jannoman
Messages postés256Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention20 février 20081 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
jannoman
Messages postés256Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention20 février 20081 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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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)