1

我已经检查过 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++ 语言标准会删除警告,但不会删除错误。

4

2 回答 2

1

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

于 2013-09-16T18:37:28.637 回答
1

一种解决方法是使用旧式 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-09-16T19:53:44.950 回答