2016-05-30 30 views
0

3つのクラスで構造を設定するのは難しいです。私はインクルード/フォワード宣言についてはわかりません。フォワード宣言とグローバル名前空間宣言

以下のコードは、inclino.hに名前空間とenumを追加するまでコンパイルされます。私は

// InclinoReading.h 

class Inclino; 
class InclinoMeasure; 

class InclinoReading 
{ 
    InclinoMeasure *m_inclino; 

    void f(inclino::a a); 
} 

構造をい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から "inclinoが宣言されていない" 受け取ります正しい ?他のクラスのenumにどうやってアクセスできますか?

ありがとうございます。

編集:私はネームスペースの問題を3つのクラスを含む新しいファイルに入れて修正しました。しかし、私はインクルード/フォワード宣言を誤用しているようです。

答えて

1

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

これは、名前空間inclinoと列挙a現在Inclino.hであるために定義されているが、InclinoMeasure.hInclino.hを含まない(それは円形の依存性を導入するため、ヘッダとの間の電流の関係を与えてはなりません)。前方宣言は、名前空間と列挙型とは関係ありません。

この問題を解決するには、名前空間と列挙型の定義をInclinoReading.hに移動します。

Inclino.hInclinoMeasure.hの両方にInclinoReading.hが含まれているため、これを使用すると3つのヘッダーすべてで使用できるようになります。

+0

ありがとう、それはenumで動作しますが、InclinoMeasure.cpp(Inclinoメソッドを呼び出すと)から "Inclinoの型InClino 'の無効な使用があります。私の問題は、私が考える前方宣言の詳細です。 – Pierma

+0

'InclinoMeasure.cpp'に' Inclino.h'を含めましたか?そうでない場合、これは 'エラー:不完全な型の無効な使用 'クラスInclino'を引き起こす可能性があります。また、ヘッダーファイルにヘッダーガードがあることを確認する必要があります。さもなければ、 'InclinoMeasure.cpp'に' Inclino.h'をインクルードした後、 'class InclinoMeasure''の' error:redefinition'というエラーが発生するかもしれません。 –

+0

2つのファイル+各クラスファイルの2つの前方宣言を含めると、すべて問題はないようです。プログラムは期待通りに動作しますが、それは良いコードですか? (そして、私はヘッダーガードを持っています)。あなたの助けをもう一度ありがとう。 – Pierma

関連する問題