2012-02-17 3 views
3

이렇게 2 차원 배열을 선언했습니다. 하지만 그로 인한 오류가 발생했습니다선언 중에 2 차원 벡터 값을 초기화하는 중

vector <vector <int> > plain(vector <int>(4,0)) = {{23,43,45,56}, 
                {67,85,13,59}, 
                {48,23,9,57}, 
                {24,52,90,12}}; 


rijndael.cpp:12:51: error: expected ‘,’ or ‘;’ before ‘=’ token 
rijndael.cpp:57:1: error: expected ‘}’ at end of input 

이전의 모든 세미콜론이 올바르게 지정되었습니다. 이 선언문에서 내가 어디에서 잘못 될지 말해 줄 수 있습니까?

나는 생성자 호출을 제거하고 내 선언은 지금

vector <vector <int> > plain/*(vector <int>(4,0))*/ = {{23,43,45,56}, 
                 {67,85,13,59}, 
                 {48,23,9,57}, 
                 {24,52,90,12}}; 

하지만 오류가 지금

rijndael.cpp:15:19: error: in C++98 ‘plain’ must be initialized by constructor, not by ‘{...}’ 
rijndael.cpp:15:19: error: deducing from brace-enclosed initializer list requires #include <initializer_list> 
rijndael.cpp:15:19: error: deducing from brace-enclosed initializer list requires #include <initializer_list> 
rijndael.cpp:15:19: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x 
rijndael.cpp:15:19: error: could not convert ‘{{23, 43, 45, 56}, {67, 85, 13, 59}, {48, 23, 9, 57}, {24, 52, 90, 12}}’ to ‘std::vector<std::vector<int> >’ 

내가 이것을 어떻게 수습 할 입니까? 도움을 주시면 대단히 감사하겠습니다.

답변

3

당신은 예를 들어, 하나의 스틱, 모두 생성자 호출 목록 초기화를 할 수 없습니다 : (. 당신은 목록 초기화에 대한 =를 생략 할 수 있습니다)

vector<vector<int>> plain{{23,43,45,56}, 
          {67,85,13,59}, 
          {48,23,9,57}, 
          {24,52,90,12}}; 

귀하의 편집 : 글쎄, 오류가 전부 설명, 그것을 읽는 것이 도움이 될 것입니다. 목록 초기화에는 C++ 11 모드가 필요합니다. 원하지 않으면 2D 배열을 준비한 다음 ctor로 복사 한 다음 작성한 후 채워야합니다.

+0

작동하지 않았습니다. 내 질문의 편집 된 부분에 위에서 언급 한 오류가 발생했습니다 –

+2

오류 메시지에서 'C++ 98'을 사용하고있는 것으로 보입니다. GCC를 사용한다면'--std = C++ 0x' 옵션을 사용하여 C++ 11을 활성화하십시오. – Nawaz

+0

감사합니다 - std = C++ 0x worked! –

2

인수를 사용하여 명시 적으로 생성자를 호출 해보십시오.