2016-05-17 3 views
0

残念ながら、クラスZがクラスAを含む必要がある問題につながるインクルードストラクチャがありますが、Zは最初にインクルードされます。 より明確littlebit:strange include dependency

A.h includes B.h 
B.h includes C.h 
C.h includes D.h 
D.h includes Z.h 

だから、Zが定義されます。これは、 "基底クラスAが未定義" というエラーになりA.前。 すべてのクラスで私が含むクラスの関数を呼び出すので、私は前方デクリメントを使うことはできません。

この問題を回避する解決策があることを願っています。

+0

あなたが望むように見える:http://stackoverflow.com/questions/7714345/forward-declaration-with-vector-of-class-type-pointer-to-incomplete-class-type – NathanOliver

答えて

1

私はその問題を回避するために来るすべてのソリューションがあります願っています。

いいえ、クイックフィックス。コードを再構築する必要があります。少なくともw.r.t.含む。

テンプレートを探索して助けてもらえますが、必要以上に面倒なことがあります。

「である-」の関係が適用されない限り、あなたは、基本クラスとしてAを削除し、メンバーになるためにそれを動かす(。std::shared_ptr<A>またはstd::unique_ptr<A>経由)と前方Aを宣言することができます。 「is-a」関係が適用可能な場合、何らかの形で中断する必要のある循環依存性があります(スマートポインタが役立ちます)。

cppファイルの使用や要件については言及していません。 cppファイル(Z.cpp)を使用してAメンバーの呼び出しを行うコードを分離すると、ヘッダー要件が低下します。