0

私はこのような状況です (2 つの異なるヘッダー ファイルを持つ 2 つのクラス):

bh

#include "a.h"

class B {
      friend void  B* A::create(void);
   private:
     int x;
};

ああ

#include "b.h"

class A {
   public:
     void B* create(void);
   ...
};

基本的に、クラス A は「B」オブジェクトを作成します。作成関数 create() に、クラス B のプライベート メンバー 'x' を変更するアクセス権を付与したいと考えています。C# の 'internal' キーワードをより詳細なレベルでシミュレートしたいと考えています。

私が抱えている問題は、循環ヘッダー参照になってしまうことです。bh は ah の後に来たいが、ah は bh の後に来たい これを行う適切な方法は何ですか? void* ptr に頼る必要がありますか? 私は 1 種類のオブジェクトしか作成しないので、ファクトリ パターンは必要ないと思います。うまくいけば、単純なものが欠けています。

4

1 に答える 1

2

必要なのは「前方宣言」です。基本的に、クラスのヘッダーを他のクラスのヘッダーに含めません(構成を使用する場合を除いて、含める必要があります)。あなたの場合、それは次のようになります:

// B.h
class A;
class B {
    // declare pointers to A freely
};

そしてその逆はああ

アクセスフィールドへのこれらのポインターを実際に逆参照できるようにするには、おそらくB.cppにAhを含める必要があります(またはその逆)が、循環ヘッダーの包含に関する問題はなくなりました。

于 2010-10-26T23:08:24.070 に答える