C++ 初始值设定项值c+太多+;

C++ 初始值设定项值c+太多+;,c++,matrix,multidimensional-array,compiler-errors,C++,Matrix,Multidimensional Array,Compiler Errors,有人能解释一下为什么我会出现以下编译器错误: 错误:“std::array”的初始值设定项太多 #包括 #包括 使用名称空间std; 枚举状态 { 没有一个 白色 黑色 }; int main() { 数组初始值={ {State::NONE,State::NONE}, {State::WHITE,State::WHITE}, {State::NONE,State::NONE}, {State::NONE,State::NONE}, {State::NONE,State::NONE}, {Sta

有人能解释一下为什么我会出现以下编译器错误:

错误:“std::array”的初始值设定项太多

#包括
#包括
使用名称空间std;
枚举状态
{
没有一个
白色
黑色
};
int main()
{
数组初始值={
{State::NONE,State::NONE},
{State::WHITE,State::WHITE},
{State::NONE,State::NONE},
{State::NONE,State::NONE},
{State::NONE,State::NONE},
{State::NONE,State::NONE},
{State::BLACK,State::BLACK},
{State::NONE,State::NONE}
};
返回0;
}

您可以使用普通数组,如下所示:

State ini[8][2] = {
   { State::NONE, State::NONE },
  { State::WHITE, State::WHITE },
  { State::NONE, State::NONE },
  { State::NONE, State::NONE },
  { State::NONE, State::NONE },
  { State::NONE, State::NONE },
  { State::BLACK, State::BLACK },
  { State::NONE, State::NONE }
};
或者,要修复代码,请添加一对括号:

 array<array<State, 2>, 8> initial = { {
      {State::NONE, State::NONE },
      { State::WHITE, State::WHITE },
      { State::NONE, State::NONE },
      { State::NONE, State::NONE },
      { State::NONE, State::NONE },
      { State::NONE, State::NONE },
      { State::BLACK, State::BLACK },
      { State::NONE, State::NONE }
    } };
array initial={{
{State::NONE,State::NONE},
{State::WHITE,State::WHITE},
{State::NONE,State::NONE},
{State::NONE,State::NONE},
{State::NONE,State::NONE},
{State::NONE,State::NONE},
{State::BLACK,State::BLACK},
{State::NONE,State::NONE}
} };

您只需要额外的一对。有趣的是,clang直接调用
memset
将数组设为null,然后设置非零字段。我也检查了gcc,它设置了每个单独的字段,正如您最可能期望的那样。
 array<array<State, 2>, 8> initial = { {
      {State::NONE, State::NONE },
      { State::WHITE, State::WHITE },
      { State::NONE, State::NONE },
      { State::NONE, State::NONE },
      { State::NONE, State::NONE },
      { State::NONE, State::NONE },
      { State::BLACK, State::BLACK },
      { State::NONE, State::NONE }
    } };