2012-02-17 15 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

あなたは両方コンストラクタ呼び出しリストの初期化、1に固執、例えば持つことはできません。

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は働いた! –

2

引数で明示的にコンストラクタを呼び出してみてください。

関連する問題