Compilation des .h [Résolu]

Signaler
Messages postés
258
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
20 février 2008
-
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
258
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
20 février 2008
1
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
Messages postés
258
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
20 février 2008
1
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)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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