2011-12-15 10 views
25
class base { 
public: 
    base a; 
}; 

これは、コンパイルエラーになります。 staticクラスメンバーがstaticがうまくいく理由です、クラスのインスタンスに格納されていないので、このコードのに対しクラスはなぜ静的メンバーを持つことが許されますが、非静的メンバーは持てませんか?

class base { 
public: 
    static base a; 
}; 

は、コンパイルエラーに

+8

{静的Bをストラクト。 } a :: b; –

+2

はあなたがちょうど私O_O –

+6

ヨ犬頭痛を与えたJohannesSchaub - litb @、私は – Matthew

答えて

41

を与えるものではありません。右、無限の大きさ -

ランタイムを壊すのと同じタイプの別のオブジェクト内のオブジェクトを保存しますか?

sizeof何を返すのでしょうか?オブジェクトのサイズはコンパイラによって認識される必要がありますが、同じタイプのオブジェクトが含まれているため意味がありません。

6

私はエラーを推測しているが

フィールド静的でないとき、クラスAが完全に閉じ括弧まで定義されていないため、「」これは、不完全な型

ですしているようなものです。一方、静的メンバ変数は、クラスが完全に定義された後で別個の定義ステップを必要とするため、それらが動作します。

宣言の定義の違いを検索してより詳細な説明を得てください。

+0

自体はその後に「追加」するための「リマインダーを設定」のコンパイラの並べ替えができませんでした...クラスのようなあなたを聞いたことありますか?限界は何ですか? –

+2

@AssafLevyオブジェクトのサイズはどのくらいでしょうか。 'Base'は' Base'が含まれている 'Base'を、含まれています... –

+3

@JamesKanze ..お互い対向する2つのミラーの並び替えは、おかげでそれを手に入れました! –

関連する問題