3

私がこのようなことをしたいと思うように、

class Object {
public:
World * Parent_World; //This here
Object(World * Parent_World=NULL) : Parent_World(Parent_World) {}
};

class World {
public:
Object * Objects = new Object[100];
}

注文が原因で機能しません。また、ワールドからオブジェクトクラスにアクセスしたいので、単にワールドを先に定義することはできません。

4

4 に答える 4

5

オブジェクトの前に前方宣言を行います。

class World; //Now you can use pointers and references to World
class Object {
public:
World * Parent_World; //This here
Object(World * Parent_World=NULL) : Parent_World(Parent_World) {}
};

class World {
public:
Object * Objects = new Object[100];
}

前方宣言を行うと、宣言されている型へのポインターと参照を処理するのに十分な情報がコンパイラーに提供されます。

于 2012-06-21T19:01:22.710 に答える
1

Andrewの答えは正しいです:前方宣言が必要です。

ただし、コンパイラがオブジェクトのサイズを認識している必要がある場合は、前方宣言を使用できないことに注意してください。つまり、World*メンバーは機能しますが、Worldメンバーは機能しません。

于 2012-06-21T19:02:56.793 に答える
0

次のようにクラスを前方宣言します。

   class World;

これは、Worldクラスが定義されるまでWorldへのポインタのみを使用する場合に機能します。

于 2012-06-21T19:01:42.687 に答える
0

簡単に言えば

class World;

class Object { ... }

これは前方宣言と呼ばれます。

于 2012-06-21T19:02:31.417 に答える