【问题标题】:too many initializer values c++太多的初始化值c ++
【发布时间】:2021-01-29 03:40:36
【问题描述】:

有人可以解释为什么我会收到以下编译器错误:

错误:‘std::array<:array>, 8>

的初始化程序太多
#include <iostream>
#include <array>

using namespace std;

enum State
{
  NONE,
  WHITE,
  BLACK
};


int main()
{

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

  return 0;
}


【问题讨论】:

  • 您只需要另外一对braces
  • 有趣的是,clang 从字面上调用memset 来清空数组,然后设置非零字段。我也检查了 gcc,它设置了每个单独的字段,正如你很可能期望的那样。

标签: c++ matrix multidimensional-array compiler-errors


【解决方案1】:

您可以像这样使用普通数组:

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

【讨论】:

    猜你喜欢
    • 2016-05-16
    • 2021-06-03
    • 2012-09-02
    • 1970-01-01
    • 2020-05-04
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多