2013-09-16 47 views
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++语言标准的设置中删除警告,而不是错误。

+0

您正在使用哪种编译器? – jmstoker

+0

你可以在你的文章中包含实际的编译器错误信息吗? – bennofs

+0

MinGW在Code :: Blocks – Dragonphase

回答

0

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

+0

我说实话,我真的不知道在哪里寻找我的编译器进程。我正在使用MinGW编译Code :: Blocks。 – Dragonphase

+0

您将需要找到该信息。某处必须有一个选项来设置/修改你的编译器标志。我会寻找任何看起来像“-std = C++ 98”或类似的东西,即不是警告提到的两个选项。 gcc 4.8.1的完整列表(假设你是真正的编译器)可以在这里找到:http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/C-Dialect-Options。 html – patrickvacek

+0

我在我的编译器标志列表中找不到任何相关的东西。此外,我得到这个错误的事实告诉我,我的代码不会在不同的机器上以相同的方式编译;有没有其他方法可以解决这个问题,而不需要改变编译器设置 – Dragonphase

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)); 
}