2013-09-16 2 views
1

이미 오류를 수정하는 방법을 확인했습니다. 나는 다른 컴퓨터에서 컴파일 할 때 이것을 얻지 못했지만 갑자기 지금은 내 PC에서 컴파일되지 않습니다. 여기에 내가지고있어 오류 발생 :이니셜 라이저 목록에서 배열에 할당

Error: Assigning to an array from an initializer list 

는 그리고 여기에 코드입니다 :

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

: 나는 같은 줄에 경고를 얻을

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

는 또한 언급 할 가치가있을 수도 있습니다 분명히 확장 된 이니셜 라이저 목록을 사용하기 위해이 두 가지 중 하나를 사용해야한다는 것을 분명히 알지만, 문제를 해결하기 위해 무엇을해야할지 전혀 모릅니다.

편집 :

는 설정에서 C++ 11 ISO C++ 언어 표준을 따르 ++ g을 갖는 것은 경고가 아니라 오류를 제거합니다.

+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)); 
} 
관련 문제