没关系:
int vec_1[3] = {1,2,3};
所以
出了什么问题struct arrays{
int x[3];
int y[3];
int z[3];
};
arrays vec_2;
vec_2.x = {1,2,3};
给出了 错误:无法在赋值
中将'<大括号括起来的初始化列表>'转换为'int'我已经阅读了很多有关此错误的帖子,但目前还不清楚问题出在哪里。
答案 0 :(得分:5)
第一个是初始化。第二种是尝试分配,但数组不可分配。
您可以执行以下操作:
arrays vec_2 = {{1,2,3}, {3,4,5}, {4,5,6}};
如果您只想初始化vec_2.x,那么您可以省略其余的初始值设定项:
arrays vec_2 = {1,2,3};
在这种情况下,vec_2
的其余部分将被初始化为包含零。
虽然您必须在初始化程序周围包含至少一组大括号,但如果您不想,则不必包含“内部”大括号。包括它们可以给你一点额外的灵活性。例如,如果要初始化vec_2.x中的前两个项目和vec_2.y中的第一个项目,可以使用:
arrays vec_2 = {{1,2}, {3}};
在这种情况下,您将设置vec_2
,就像您使用{1, 2, 0, 3, 0, 0, 0, 0, 0};
作为初始化程序一样。
答案 1 :(得分:3)
这是赋值,而不是初始化:
arrays vec_2;
vec_2.x = {1,2,3};
使用以下内容,这相当于您尝试的内容:
arrays vec_2 = { {1, 2, 3 } };
如果您还想提供y
和z
的值:
arrays vec_2 = { {1,2,3}, // x
{4,5,6}, // y
{7,8,9} // z
};
答案 2 :(得分:2)
arrays vec_2;
vec_2.x = {1,2,3};
正如错误消息所示,第二行是赋值,而不是初始化。他们是两件不同的事情。
你需要这样做:
arrays vec_2 = {
{1,2,3}, //initializes x
{5,6,7}, //initializes y
{7,8,9}, //initializes z
};
请注意,在最后一个内部支撑后允许,
! (即{7,8,9},
< - 允许)。这样的尾随逗号通常对生成的代码有用:你可以添加另一行,而不用关心逗号,也不需要考虑最后一行的任何特殊情况。
答案 3 :(得分:2)
int vec_1[3] = {1,2,3};
尽管它看起来像,但这不是赋值,这是(有效地)构造函数调用。它构造了一个int
数组,初始化为这些值。
arrays vec_2;
这构造了一个struct,并且每个成员数组都有默认值。
vec_2.x = {1,2,3};
您无法分配数组,并且此成员已经构建。解决方法是这样的:
arrays vec_2 = { {1, 2, 3} };
与
相同arrays vec_2 = { {1, 2, 3}, {0, 0, 0}, {0, 0, 0} };
答案 4 :(得分:1)
在第一个例子中,当你声明它时,你正在初始化它。
在第二个示例中,您初始化两次(非法),一次声明arrays struct
,然后再说vec_2.x = {1,2,3}