3

还行吧:

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

这给出了:

error: cannot convert ‘<brace-enclosed initializer list>’ to ‘int’ in assignment

我已经阅读了很多关于这个错误的帖子,但仍然不清楚问题出在哪里。

4

5 回答 5

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};初始化程序一样。

于 2012-03-22T16:45:00.857 回答
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
               };
于 2012-03-22T16:44:00.767 回答
2
arrays vec_2;
vec_2.x = {1,2,3};

正如错误消息所说,第二行是assignment,而不是initialization。它们是两种不同的东西。

你需要这样做:

arrays vec_2 = {
      {1,2,3}, //initializes x 
      {5,6,7}, //initializes y
      {7,8,9}, //initializes z 
};

请注意,,在最后一个内大括号之后是允许的!(即{7,8,9},<-- 允许)。这种尾随逗号通常对生成的代码很有帮助:您可以添加另一行,而不用关心逗号,也不需要考虑最后一行的任何特殊情况。

于 2012-03-22T16:45:30.067 回答
2
int vec_1[3] = {1,2,3};

尽管它看起来像,这不是assignment,这是(有效地)构造函数调用。它构造一个int初始化为这些值的数组。

arrays vec_2;

这构造了一个结构,并且每个成员数组都具有默认值。

vec_2.x = {1,2,3};

您不能分配数组,并且该成员已被构造。解决方法是这样的:

arrays vec_2 = { {1, 2, 3} };

这与

arrays vec_2 = { {1, 2, 3}, {0, 0, 0}, {0, 0, 0} };
于 2012-03-22T16:45:55.967 回答
1

在第一个示例中,您在声明向量时对其进行初始化。

在第二个示例中,您进行了两次初始化(非法),一次是在您声明 the 时,arrays struct一次是在您说vec_2.x = {1,2,3}

于 2012-03-22T16:43:51.353 回答