Bonjour,
Actuellement je travaille sur un GROS projet Irrlicht, avec toute une hiérarchie de fichiers .h et .cpp sous l'environnement VS 2008 pro.
Mon problème vient des includes, j'ai jusque là fait en sorte d'éviter les erreurs du compilateur en les échangeant, en déclarant les classes en amont de celles qui les utilisent (Avec class Nom_De_La_Classe; , néanmoins ça ne fonctionne pas pour les classes héritées) ou encore en les mettant dans les fichiers .cpp ...
Les erreurs qui persistent sont souvent du genre :
- error C2061: erreur de syntaxe : identificateur 'nom_de_la_classe'
- error C2143: erreur de syntaxe : absence de ';' avant '*' (Avant les noms de classes dans les méthodes des fichiers .h, ceux ci n'étant apparemment pas reconnus malgré l'include)
- error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut (Surement pour la même raison que le précédent)
Bref, je suppose que ce n'était pas la bonne chose à faire, et aujourd'hui j'ai besoin d'utiliser un objet dans une classe, mais dès que j'ajoute l'include nécessaire, j'obtiens les deux dernieres erreurs ci dessus sur un autre fichier que celui qui a été modifié mais sur la classe concernée. (J'ajoute #include "ClasseZ.h" dans ClasseA.h, ClasseB.h va retourner les erreurs sur les instances de ClasseA)
Je souligne le fait que les erreurs ne viennent pas d'un ; manquant à la fin d'une classe, j'ai vérifié et celles-ci compilent pour l'instant correctement tant que je ne change pas l'ordre des includes et que je n'en ajoute pas... Mais plus moyen d'avancer même avec les classes déjà faites.
Il y a un #pragma once en haut de tous les fichiers .h également.
En gros, savez vous si il convient de respecter certaines règles dans l'encapsulation des includes ?
Merci d'avance !
Hors ligne
as-tu utilisé dans tes headers :
#ifdef _MA_CLASSE_
#define MA_CLASSE_
#endif
????
Hors ligne
J'ai utilisé les #pragma once. (Cela dit j'ai essayé avec ces en-têtes, même résultat)
Je ne pense pas que le problème vienne de là sinon les erreurs seraient du type classe déjà définie.
Hors ligne