0

同じファイル内で順次宣言されているいくつかのクラスがありますが、相互に参照できるようにしたいと考えています。ただし、クラスはその上位のクラスによってのみ宣言できます。

それらを別々の .h ファイルに分けて#include、必要に応じて互いに持つことでこれを行うことはできますか? または、同じファイルに保持しながらこれを行うことができます>

それとも、これは悪い習慣ですか?

(具体的には、特定の順序でクラス A と対話しようとする可能性がある、異なるクラス タイプのクラス B の複数のインスタンスを追跡する必要があるクラス A のインスタンスが 1 つあります。クラスAのその1つのインスタンス化と通信しようとしているクラスB...)

4

5 に答える 5

6

「参照」がポインタを意味する限り、これは機能するはずです:

class Foo;

class Bar {
  Foo* p;
};

class Foo {
  Bar* p;
};
于 2013-05-07T18:21:44.790 に答える
5

クラスを前方宣言し、後でファイル内で定義することができます。

class A;

class B
{
    // As pointed out by syam this will have to be an A* or A& not just of type A.
    // If this line were:
    // A myA
    // The compiler gives error: field ‘myA’ has incomplete type
    A* myA;
};

class A {};

Aのメソッドから のメソッドまたは属性にアクセスしたい場合はいつでもB、 の定義の後にそれらのメソッドが定義されていることを確認する必要がありAます。

class A;

class B
{
    A& myA;
    int getAValue(void); // Can't use myA.value here as value is not declared yet.
};

class A
{
public:
    int value;
};

int B::getAValue(void) {return myA.value;}
于 2013-05-07T18:21:30.463 に答える
0

前方宣言を使用できます。

于 2013-05-07T18:22:19.783 に答える
0

自己参照ポインターを導入することもできます。

class Foo {
    Foo* parent;
};
于 2013-05-07T18:30:39.857 に答える