2012-05-12 30 views
3

でコンパイル時に得られた構造体型の変数を初期化します。は、私は次の構造体を持っているC++

struct B 
{ 
    int a; 
    int b; 
}; 

struct D: public B 
{ 
    int c; 
}; 

私は構造体Bにそれを初期化するかのように、コンパイル時に構造体Dのいくつかの変数を初期化したいです私は次の方法でこれを実行しようとしましたが、それはコンパイルされませんでした

B b1 = { value_of_a, value_of_b }; 

::のように見えます

D d1 = { { value_of_a, value_of_b } , value_of_c }; 
D d2 = { value_of_a, value_of_b , value_of_c }; 

私は構造体を変更した場合:

struct D 
{ 
    B bb; 
    int c; 
}; 

それは "D1" と "D2" 初期設定でコンパイルされます。

ですから、派生した構造体をどのように初期化できますか? 派生した構造体を初期化するためのルールがある場合、その理由は何ですか?

ありがとうございます。

+1

[**メンバー初期化リスト**]を使用してください(http://stackoverflow.com/questions/1711990/what-is-this-weird-colon-member-syntax-in-the-constructor/8523361# 8523361)をC++で実行します。 –

+0

しかし、そのリストはコンストラクタメソッドに送られます。 OPはコンストラクタの外で、つまりすべてのインスタンスの代わりに単一のインスタンスに対して値を設定する方法を尋ねています。 –

+0

ここで本当の目的は何ですか?あなたは初期化時間を心配していますか? –

答えて

1

Bから派生したDは(基本クラスを持つため)集計ではないため、集計初期化構文を使用して初期化することはできません。コンストラクタと初期化リストを使用する必要があります。

+1

このリンクを参照してください(Visual C++用)http://msdn.microsoft.com/en-us/library/0s6730bb%28v=vs.71%29.aspx –

関連する問題