【问题标题】:C++ Error: Too many initializers for multidimentional arrayC++ 错误:多维数组的初始化程序太多
【发布时间】:2020-03-17 15:53:23
【问题描述】:

我刚刚开始练习多维数组,并认为我可以使用字符通过它创建地图。但是,我收到“太多初始化程序”错误,似乎无法弄清楚原因。

char gameMap[5][5] = {

    {'.'},{'.'},{'.'},{'.'},{'.'},
    {'.'},{'.'},{'.'},{'.'},{'.'},
    {'.'},{'.'},{'.'},{'.'},{'.'},
    {'.'},{'.'},{'.'},{'.'},{'.'},
    {'.'},{'.'},{'.'},{'.'},{'.'}
    };

【问题讨论】:

  • 您正在初始化一列中的 25 个元素,而不是 5 行,每行 5 个元素。这就是初始化 5 个字符元素的 C 样式数组的方式:{'.', '.', '.', '.', '.'}

标签: c++ arrays


【解决方案1】:

你忘记了一些大括号,你想要这个:

  char gameMap[5][5] = {
    { {'.'},{'.'},{'.'},{'.'},{'.'} },
    { {'.'},{'.'},{'.'},{'.'},{'.'} },
    { {'.'},{'.'},{'.'},{'.'},{'.'} },
    { {'.'},{'.'},{'.'},{'.'},{'.'} },
    { {'.'},{'.'},{'.'},{'.'},{'.'} },
  };

您的代码用于初始化一个由 25 个元素组成的一维数组。

但实际上你应该这样写:

  char gameMap[5][5] = {    
    { '.','.','.','.','.'},
    { '.','.','.','.','.'},
    { '.','.','.','.','.'},
    { '.','.','.','.','.'},
    { '.','.','.','.','.'},
  };

但这里最好的解决方案是以编程方式初始化:

for (int x < 0; x < 5; x++)
  for (int y < 0; y < 5; y++)
    gameMap[x][y] = '.';

【讨论】:

  • 如果谈论最佳解决方案,如果我们假设 char 是 1 字节,您甚至可以这样做:for (int x = 0; x &lt; 5; x++) std::memset(gameMap[x], '.', 5);
  • @pptaszni 在什么方面最好?更短的生成代码:可能但不是真正相关,更快的代码:可能但可能不是真正相关。更易读的代码?没有把握。无论如何你的代码是错误的,它应该是std::memset(&amp;gameMap[x], '.', 5)。但我们可以放心地假设char 的大小为 1,这是根据定义。
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2016-02-23
  • 2011-04-03
  • 2015-02-26
  • 1970-01-01
  • 2019-11-04
相关资源
最近更新 更多