【问题标题】:Assigning to an array from an initializer list [duplicate]从初始化列表分配给数组[重复]
【发布时间】:2013-09-21 00:13:54
【问题描述】:

我已经检查了 SO 是否有一个 简单 方法来修复此错误。在另一台计算机上编译时我没有得到这个,但突然现在它没有在我的 PC 上编译。这是我得到的错误:

Error: Assigning to an array from an initializer list

这是代码:

int maze[12][12];

void print(bool playing);

int main()
{
    printMaze(false);
    playGame();

    return 0;
}

void print(bool playing)
{
    if (!playing) maze = {
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
        {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1},
        {2, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1},
        {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1},
        {1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 3},
        {1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
        {1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
        {1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
        {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
        {1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1},
        {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},
        {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
    };
}

值得一提的是,我在同一行收到了警告:

Warning: Extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]

我知道这显然意味着我必须使用这两个之一来使用扩展的初始化列表,但不知道如何解决这个问题。

编辑:

在设置中让 g++ 遵循 C++11 ISO C++ 语言标准会删除警告,但不会删除错误。

【问题讨论】:

  • 你使用的是哪个编译器?
  • 您能否在帖子中包含实际的编译器错误消息?
  • MinGW on Code::Blocks

标签: c++ list initializer


【解决方案1】:

您的编译步骤是什么样的?警告相当明确:您正在尝试使用需要 -std=c++11-std=gnu++11 的功能,尽管默认情况下显然启用了该功能,但您可能以某种方式覆盖了它(即显式关闭它)。您应该仔细检查您的编译过程,并确保您没有阻止该功能被允许。

【讨论】:

  • 老实说,我真的不知道在哪里寻找我的编译器进程。我正在使用 MinGW 在 Code::Blocks 上进行编译。
  • 您将需要找到该信息。某处必须有一个选项来设置/修改你的编译器标志。我会注意任何看起来像 -std=c++98 或类似的东西,即不是警告提到的两个选项。 gcc 4.8.1 的完整列表(假设您是实际的编译器)可以在这里找到:gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/C-Dialect-Options.html
  • 我在编译器标志列表中找不到任何相关内容。此外,我收到此错误的事实告诉我,我的代码不会在不同的机器上以相同的方式编译;有没有其他方法可以在不更改编译器设置的情况下解决这个问题?
  • 如果您使用具有相同标志的相同编译器的相同版本,您应该期望得到相同的结果(除非您与其他不同的库链接)。不过,我怀疑您的两个盒子之间的配置有所不同。在这种情况下,另一种方法是不使用该功能。
  • 考虑到我需要使用该功能,这并没有什么帮助。
【解决方案2】:

一种解决方法是使用旧式 C 函数 memcpy。这适用于较旧的编译器。

int maze[12][12];

void printMaze(bool playing);

int main()
{

        printMaze(false);
        playGame();
        return 0;
}

void printMaze(bool playing)
{

        static int maze1[12][12] = {
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
            {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1},
            {2, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1},
            {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1},
            {1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 3},
            {1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
            {1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
            {1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
            {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
            {1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1},
            {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},
            {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
        }; 

        if (!playing) memcpy(maze, maze1, 12*12*sizeof(int));
}

【讨论】:

    猜你喜欢
    • 2013-03-14
    • 2020-05-09
    • 1970-01-01
    • 2011-06-05
    • 2015-07-22
    • 2020-07-18
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多