あなたはこれらの相互依存関係は何も言わなかったので、これらは単なる推測です。これらのすべてにおいて、A.hはclass A
を定義し、B.hはclass B
を定義すると仮定する。
ケース1:相互依存関係は、ポインタまたは参照によるものです。
たとえば、class A
には、データタイプがB*
であり、その逆もあります。この場合、どちらのヘッダも#include
には必要ありません。代わりに前方宣言を使用してください。
ケース2:相互依存はオブジェクトを介して行われます。
たとえば、class A
には、B
のデータメンバーが含まれ、その逆もあります。この場合、あなたはホースを締めています。
ケース3:混在している依存関係。
たとえば、class A
には、タイプB
のデータメンバーが含まれますが、class B
には、データタイプがA*
です。今すぐA.hは#include B.h
になる必要がありますが、B.hは単にclass A
という前方宣言が必要です。
ヘッダーが複数回含まれないようにするには、一度のインクルードガードを使用する必要があります。
ヘッダファイル:「ああ」#ifndef A_H #define A_H #endif
で
#ifndef A_H
#define A_H
Class B;
Class A {
public:
B name_of_B_;
}
#endif
あなたは、各ヘッダが一度だけ含まれていることを確認し、各ヘッダには、クラスを持っていると仮定すると
良い質問です。プリプロセッサは行単位で作業するので、 '#ifdef'、' #define'、 '#endif'がどのように動作するかを調べることができます:-) – Stan