2012-01-08 10 views
3
struct comp { 
    long a; 
    vector<int> b(9); 
    bool c; 
}; 

エラー:なぜ構造体のベクトルメンバーを宣言して初期化できないのですか?

code.cpp:67:19: error: expected identifier before numeric constant 
code.cpp:67:19: error: expected ‘,’ or ‘...’ before numeric constant 

これの何が問題になっているのですか? bに9つの要素があると言うと、なぜg ++が受け入れないのですか?

+0

なぜC++標準でこれが許されないのですか? –

+0

そうですが、コンストラクタを使用せずにこれを行う別の構文がありますか? – Lazer

答えて

10

C++はそのように動作しないためです。

初期化子は、コンストラクタのの初期化リストに入ります。

struct comp { 
    long a; 
    vector<int> b; 
    bool c; 

    comp() : b(9) { } 
}; 

(このように定義されたクラスがもはや凝集体であることに注意してください。)

:C++ 11をメンバ初期化子を追加し、のみコピー初期化構文を使用して:

struct Foo { 
    int a = 5; 
    vector<char> b = vector<char>(8); 
}; 

これに対するコンパイラのサポートはまだ不完全です。

+0

それはテキストは純粋な悪です。私たちの目を哀れみます。 –

+0

合意と編集。 –

0

vector<int> b(9);は、具体的なデータ構造です。実際のデータ構造ではなく、タイプとラベルを探しています。 vector<int> b;が必要です。

関連する問題