我有一个结构的构造函数接受一个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} };
}
G ++抛出错误,错误:无法将“{{1,2,3,4}}”从“大括号括号初始化列表”转换为“std :: vector”
编辑:是的,根据评论,添加两个大括号是有效的。我可以看到,外部括号用于成员初始化,内部制动器指定数组成员的初始化列表。
这有效 -
int main()
{
vector<Test> Ar = {
{ { 1, 2, 3, 4 } }
};
}
答案 0 :(得分:1)
问题可以归结为以下几点:
Test t = {1,2,3,4}; // error
请注意,{1,2,3,4}
可以转换为std::array<int, 4>
,而不是1,2,3,4
。因此,要初始化Test
,您需要两对括号。
因此,在您的代码中,要初始化vector
Test
,需要三对括号。