2016-05-30 1 views
0

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.

Répondre

1

I receive "inclino has not been declared" from InclinoMeasure.h

En effet, l'espace de noms inclino et ENUM a sont actuellement définies dans Inclino.h, mais InclinoMeasure.h ne comprend pas Inclino.h (et ne doit pas, compte tenu de la relation actuelle entre les en-têtes, car cela introduirait une dépendance circulaire). La déclaration directe de class Inclino est sans rapport avec l'espace de noms et l'énumération.

Pour résoudre ce problème, vous pouvez déplacer la définition de l'espace de nom et l'énumérer à InclinoReading.h.

Cela le rendra disponible dans les trois en-têtes où il est utilisé, puisque Inclino.h et InclinoMeasure.h incluent InclinoReading.h.

+0

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

+0

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'. –

+0

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