J'ai des difficultés à configurer une structure avec 3 classes. Je ne suis pas sûr de la déclaration includes/forward.Déclaration directe et déclaration de l'espace de noms global
Le code ci-dessous se compile jusqu'à ce que j'ajoute l'espace de noms et l'énumération dans inclino.h. Je reçois "inclino n'a pas été déclarée" de InclinoMeasure.h
Inclino.h
// Inclino.h
#include "InclinoMeasure.h"
#include "InclinoReading.h"
namespace inclino {
enum a{a1, a2}
}
class Inclino
{
list<InclinoMeasure*> m_measures;
void f(inclino::a a);
}
InclinoMeasure.h
// InclinoMeasure.h
#include "InclinoReading.h"
class Inclino;
class InclinoMeasure
{
Inclino *m_inclino;
list<InclinoReading*> m_readings;
void f(inclino::a a);
}
InclinoReading.h
// InclinoReading.h
class Inclino;
class InclinoMeasure;
class InclinoReading
{
InclinoMeasure *m_inclino;
void f(inclino::a a);
}
Est-ce que la structure est correct ? Comment puis-je accéder à l'énumération dans d'autres cours?
Merci d'avance.
Modifier: J'ai corrigé le problème d'espace de noms en le mettant dans un nouveau fichier incluant les 3 classes. Mais il semble que j'ai mal utilisé la déclaration include/forward.
Merci, cela fonctionne pour l'énumération mais j'ai "Utilisation invalide de type incomplet" de la classe Inclino '"de InclinoMeasure.cpp (lorsque j'appelle une méthode Inclino). Mon problème concerne davantage la déclaration à terme, je pense. – Pierma
Avez-vous inclus 'Inclino.h' dans' InclinoMeasure.cpp'? Sinon, cela pourrait provoquer une erreur: utilisation invalide du type incomplet "class Inclino". En outre, vous devez vous assurer que vous avez des gardes d'en-tête dans vos fichiers d'en-tête; sinon, vous pourriez rencontrer 'error: redéfinition de 'class InclinoMeasure'' après avoir inclus' Inclino.h' dans 'InclinoMeasure.cpp'. –
Tout semble bien si j'inclure les 2 fichiers + la déclaration 2 forward pour chaque fichier de classe. Le programme fonctionne comme prévu mais est-ce un bon code? (et oui j'ai des gardes en-tête). Merci encore pour votre aide. – Pierma