2017-02-22 7 views
1

私は現在、3つのメンバーのうちの2つだけを初期化する構造体を持っています。私は意図的にこれを行います。なぜなら、創造の時代には、価値がどうなるかはわかりません。私はこれを行うと部分的に初期化された構造体オブジェクトをベクターに配置する方法は?

struct my_data { 
    my_data(int x_, int y_) { 
     x = x_; 
     y = y_; 
    } 


    int x; 
    int y; 
    double z = 0; 
}; 

int main() { 
    std::vector<my_data> my_vec; 
    my_vec.resize(10); 

    my_vec[0] = {3,4}; 
} 

私はerror: no matching function for call .... _T1(std::forward<Args ..

はこのエラーを回避する方法はありますか私は、コンストラクタのパラメータとしてでもzを含める必要があります取得します。あなたはデフォルトのコンストラクタ必要

答えて

1

my_data() = default; 
+0

は、デフォルトコンストラクタのvector.resize()の呼び出しのためのものですか? – solti

+0

@solti、yes - vector.resize()はそれを期待しています。 'my_vec [0] = {3,4};で何が間違っていますか? – marcinj

+0

よっ!ありがとうございました。申し訳ありませんがabt 'my_vec [0] = {3,4};'それは私の悪い..あなたはそれを無視することができます – solti

1

FWIWを、あなたは、コンストラクタとzのデフォルト値を除去することにより、使用するmy_dataを容易にすることができます。

struct my_data { 
    int x; 
    int y; 
    double z; 
}; 

int main() { 
    std::vector<my_data> my_vec; 
    my_vec.resize(10); 

    my_vec[0] = {};   // Same as = {0, 0, 0}; 
    my_vec[1] = {3};   // Same as = {3, 0, 0}; 
    my_vec[2] = {3, 4};  // Same as = {3, 4, 0}; 
    my_vec[3] = {3, 4, 2.0}; 
} 
関連する問題