2009-06-20 22 views
4

**構造が自己参照できる場合。 likeクラスを自己参照することはできますか?

struct list 
{ 
    struct list *next; 
}; 

デフォルトのアクセス指定子を除き、classとstructの間に違いはありません。 それはクラスを記述することが可能である...

class list 
{ 
    class list *next; 
}; 

であってもよい自己参照クラスを取得するには何が違うの構文がありますか。? YESの場合、その後どのように**

+2

あなた自身が言及したように、デフォルトのアクセス修飾子を除いて、C++のクラスと構造体の間には違いはありません。 –

+2

C++では少なくとも99.9%のケースで変数名の前に 'struct'または 'class'をタイプしないでください: "class list {list * next;};" –

+0

ええ、 "構造体リスト*次へ" Cのことだけです。 C++では、常に "list * next;"を実行します。 – newacct

答えて

12

はい、しかし、あなたはポインタまたはクラス(または構造体)

典型的な方法を参照するだけの唯一の自己参照であることができます?

class list { list* next; } 

あなたは完全な宣言は(ちょうどFORWていない場合は

class list; 
class node; 

class list { node* first; } 
class node { list* parentList; node* next; } 

:あなたが相互に参照するために2つのクラスを必要とする場合は、あなただけのように同じように、クラスを宣言転送する必要がard宣言)、ポインタまたは参照のみを宣言できます。これは、コンパイラは常にポインタまたは参照のサイズを知っているが、完全な宣言がない限り、クラスまたは構造体のサイズを知らないためです。

+2

+1 - nice - しかし最後の文は 'class definition'で終わるべきです(宣言ではありません:) –

+0

+1 Faisal/Lou。 "クラスX;"不完全な型の "完全な宣言"です。 Cは "struct list {int d;};"その定義を完全な型の宣言と呼びます。 C++はそれを定義と呼ぶことによってそれを示します。そうでなければニースの答え、もちろん。 –