如何将部分初始化的struct对象放入向量中?

时间:2017-02-22 19:12:46

标签: c++ c++11

我目前有结构,我只初始化三个成员中的两个。我有目的地这样做,因为在创作期间我不确定它的价值是什么(我实际上很好,因为它只是零)。

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作为参数。

2 个答案:

答案 0 :(得分:1)

您需要一个默认构造函数:

my_data() = default;

答案 1 :(得分:1)

FWIW,您可以通过删除构造函数和默认值my_data来使z更容易使用。

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};
}