【问题标题】:Error: Assigning to an array from an initializer list; code working on ubuntu 10.04 but not on 14.04错误:从初始化列表分配给数组;适用于 ubuntu 10.04 但不适用于 14.04 的代码
【发布时间】:2015-01-04 04:44:02
【问题描述】:

如果有人能就我的问题指出正确的方向,我会非常高兴。

我在这个论坛和其他一些论坛上阅读了多篇关于此问题的帖子,但无济于事。

我在带有 C++ 的 Qt Creator 3.2.1 中的 Ubuntu 14.04 下工作。代码又大又旧,它可以在 Ubuntu 10.04 下的其他旧计算机上编译,没有问题。

我得到的错误是“Assigning to an array from an initializer list”。

代码是这样的:

MapOut =
{
    {0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},
    {0,1},{1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1},
    {0,2},{1,2},{2,2},{3,2},{4,2},{5,2},{6,2},{7,2},
    {0,3},{1,3},{2,3},{3,3},{4,3},{5,3},{6,3},{7,3},
    {0,4},{1,4},{2,4},{3,4},{4,4},{5,4},{6,4},{7,4},
    {0,5},{1,5},{2,5},{3,5},{4,5},{5,5},{6,5},{7,5},
    {0,6},{1,6},{2,6},{3,6},{4,6},{5,6},{6,6},{7,6},
    {0,7},{1,7},{2,7},{3,7},{4,7},{5,7},{6,7},{7,7},
    {0,8},{1,8},{2,8},{3,8},{4,8},{5,8},{6,8},{7,8},
    {0,9},{1,9},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9},
    {0,10},{1,10},{2,10},{3,10},{4,10},{5,10},{6,10},{7,10},
    {0,11},{1,11},{2,11},{3,11},{4,11},{5,11},{6,11},{7,11},
    {0,12},{1,12},{2,12},{3,12},{4,12},{5,12},{6,12},{7,12},
    {0,13},{1,13},{2,13},{3,13},{4,13},{5,13},{6,13},{7,13},
    {0,14},{1,14},{2,14},{3,14},{4,14},{5,14},{6,14},{7,14},
    {0,15},{1,15},{2,15},{3,15},{4,15},{5,15},{6,15},{7,15},
    {0,16},{1,16},{2,16},{3,16},{4,16},{5,16},{6,16},{7,16},
    {0,17},{1,17},{2,17},{3,17},{4,17},{5,17},{6,17},{7,17},
    {0,18},{1,18},{2,18},{3,18},{4,18},{5,18},{6,18},{7,18},
    {0,19},{1,19},{2,19},{3,19},{4,19},{5,19},{6,19},{7,19},
    {0,20},{1,20},{2,20},{3,20},{4,20},{5,20},{6,20},{7,20},
    {0,21},{1,21},{2,21},{3,21},{4,21},{5,21},{6,21},{7,21},
    {0,22},{1,22},{2,22},{3,22},{4,22},{5,22},{6,22},{7,22},
    {0,23},{1,23},{2,23},{3,23},{4,23},{5,23},{6,23},{7,23}
};

相当大的阵列... 36x8... 如果我这样做:

static int MapOut[] =
{
    {0,0},{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},
    {0,1},{1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1},
    {0,2},{1,2},{2,2},{3,2},{4,2},{5,2},{6,2},{7,2},
    {0,3},{1,3},{2,3},{3,3},{4,3},{5,3},{6,3},{7,3},
    {0,4},{1,4},{2,4},{3,4},{4,4},{5,4},{6,4},{7,4},
    {0,5},{1,5},{2,5},{3,5},{4,5},{5,5},{6,5},{7,5},
    {0,6},{1,6},{2,6},{3,6},{4,6},{5,6},{6,6},{7,6},
    {0,7},{1,7},{2,7},{3,7},{4,7},{5,7},{6,7},{7,7},
    {0,8},{1,8},{2,8},{3,8},{4,8},{5,8},{6,8},{7,8},
    {0,9},{1,9},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9},
    {0,10},{1,10},{2,10},{3,10},{4,10},{5,10},{6,10},{7,10},
    {0,11},{1,11},{2,11},{3,11},{4,11},{5,11},{6,11},{7,11},
    {0,12},{1,12},{2,12},{3,12},{4,12},{5,12},{6,12},{7,12},
    {0,13},{1,13},{2,13},{3,13},{4,13},{5,13},{6,13},{7,13},
    {0,14},{1,14},{2,14},{3,14},{4,14},{5,14},{6,14},{7,14},
    {0,15},{1,15},{2,15},{3,15},{4,15},{5,15},{6,15},{7,15},
    {0,16},{1,16},{2,16},{3,16},{4,16},{5,16},{6,16},{7,16},
    {0,17},{1,17},{2,17},{3,17},{4,17},{5,17},{6,17},{7,17},
    {0,18},{1,18},{2,18},{3,18},{4,18},{5,18},{6,18},{7,18},
    {0,19},{1,19},{2,19},{3,19},{4,19},{5,19},{6,19},{7,19},
    {0,20},{1,20},{2,20},{3,20},{4,20},{5,20},{6,20},{7,20},
    {0,21},{1,21},{2,21},{3,21},{4,21},{5,21},{6,21},{7,21},
    {0,22},{1,22},{2,22},{3,22},{4,22},{5,22},{6,22},{7,22},
    {0,23},{1,23},{2,23},{3,23},{4,23},{5,23},{6,23},{7,23}
};

错误是"braces around scalar initializer for type 'int' "。

到目前为止,我还没有解决这个问题...... 任何帮助将不胜感激......提前致谢!

【问题讨论】:

  • '`' 字符是拼写错误还是您在代码中也使用了它?
  • -1 不是真正的代码。 MapOut = 作为 C++ 声明的开头无效。
  • 对不起,这是一个错字,这是我在这里的第一篇文章,所以我在将代码与文本分开时遇到了一些麻烦。在我看来,那些特殊的标志有助于格式化......我很傻...... :)
  • 批准更正,不再有错别字...

标签: c++ arrays qt initializer


【解决方案1】:

你没有整数数组,你有一个整数数组数组。所以你需要这样声明它:

static int MapOut[][2] = { ... };

【讨论】:

  • 非常感谢!有效!我知道这是一个数组数组,只是不太确定如何将它告诉计算机:) 再次感谢!
【解决方案2】:

首先,数组没有赋值运算符。所以你可能不会写例子

MapOut = { /*...*/ };

我也不明白36x8与你展示的代码sn-p有什么关系。

你的意思是二维数组吗?

无论如何,您对数组的初始化是不正确的。

也许您希望拥有一个整数对数组,并能够在其定义后对其进行分配。如果是这样,那么您应该使用标准类std::array

例如

std::array<std::pair<int, int>, 36 * 8> a = { { 0, 0 }, { 1, 0 }, /*...*/ };

【讨论】:

  • 确切地说是 288 对......所以,288 个单元格有 2 个元素,但我显然没有抓住重点。谢谢您的答复!以后我会更精确。
【解决方案3】:

我敢打赌这是你的编译器。

上面的第二个例子(忽略错别字)在 c 中编译并带有警告但在 c++ 中失败。试过了 http://www.compileonline.com/compile_c_online.php 和http://www.compileonline.com/compile_cpp_online.php

您可能使用了接受上述内容的较旧 C++ 编译器 - 仅找不到旧编译器的好选择。

显然,正如其他人所指出的那样,代码有问题,但我只是在回答这样一个事实,即它过去不再编译了。

【讨论】:

    猜你喜欢
    • 2016-03-16
    • 2021-12-06
    • 2013-03-14
    • 2022-12-14
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2020-03-11
    • 2020-03-29
    相关资源
    最近更新 更多