3

私は次の構造体を持っています:

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」の初期化でコンパイルされます。

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

ありがとうございました。

4

1 に答える 1

1

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

于 2012-05-12T14:39:53.300 に答える