0

A、B、C の 3 つのクラスがあります。C は#includeB によって編集され、B は#includA によって編集されます。クラス C では、ボタンのハンドラーを定義し、ボタンが押されると、C はPostMessageオブジェクト Aに移動します。 C に A を含めると、循環参照が発生するため、この循環参照を回避するにはどうすればよいですか?

編集: すべてのインクルードは実装ファイルで作成されます。

4

3 に答える 3

7

前方宣言を使用する必要があります。Cは の所有者ではないため、Aメンバとしてポインタがあると仮定します。したがって、以下を含める必要はありません。

class A; //forward declaration
class C
{
    A* a;
};

実装ファイルに含めますA.hが、それで問題ありません。A.hまた、可能であれば、 andで前方宣言を使用してくださいB.h

于 2012-09-24T15:23:46.167 に答える
1

クラス X がポインタによってのみクラス Y を使用する場合、クラス X を宣言する前に、クラス Y の前方宣言を使用する必要があります。

前方宣言を別のファイルに保持することをお勧めします。iosfwd は、このアプローチの標準的な例です

クラス X が別の方法でクラス Y を使用する場合 (たとえば、型 Y のメンバーがある場合)、クラス Y の定義全体が必要であり、前方宣言は行いません。

于 2012-09-24T15:28:14.780 に答える
0

同じヘッダー ファイルの循環参照を参照している場合、一般的な規則は、この MyHeader.h ファイルのように、定義が 1 回だけ含まれるようにヘッダーを定義でラップすることです。

#ifndef MyHeader_h
#define MyHeader_h

// my definitions here

#endif  // MyHeader_h

#pragma onceディレクティブも広くサポートされています。

于 2012-09-24T15:38:24.857 に答える