从初始化列表分配给数组

时间:2013-09-16 18:33:59

标签: c++ list initializer

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

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

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:0)

您的编辑步骤是什么样的?警告非常明确:您正在尝试使用需要-std=c++11-std=gnu++11的功能,虽然默认情况下显然已启用,但您可能已覆盖它(即明确将其关闭) ) 不知何故。您应该仔细检查编译过程,并确保不要阻止该功能被允许。