使用初始化列表初始化struct,对于std :: array

时间:2018-04-06 09:13:25

标签: c++

我有一个结构的构造函数接受一个std :: array,当我尝试使用intializer列表初始化时,它会抛出错误 “错误C2440'初始化':无法从'初始化列表'转换为'std :: vector>'

与此类似,

struct Test
{
  int a, b, c, d;
  Test(array<int, 4>) { }
}

int main()
{
    vector<Test> Ar = { {1, 2, 3, 4} };
}

Link on Coliru.

G ++抛出错误,错误:无法将“{{1,2,3,4}}”从“大括号括号初始化列表”转换为“std :: vector”

编辑:是的,根据评论,添加两个大括号是有效的。我可以看到,外部括号用于成员初始化,内部制动器指定数组成员的初始化列表。

这有效 -

int main()
{
  vector<Test> Ar = {
      { { 1, 2, 3, 4 } }
   };
}

1 个答案:

答案 0 :(得分:1)

问题可以归结为以下几点:

Test t = {1,2,3,4}; // error 

请注意,{1,2,3,4}可以转换为std::array<int, 4>,而不是1,2,3,4。因此,要初始化Test,您需要两对括号。

因此,在您的代码中,要初始化vector Test,需要三对括号。