2012-02-17 74 views
3

我已經聲明瞭像這樣的二維數組。但得到一個錯誤,由於該在聲明過程中將值初始化爲二維向量

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模式來進行列表初始化。如果你不想這樣做,你必須複製ctor來準備二維數組,然後在施工後填寫。

+0

它沒有工作。我在我的問題的編輯部分中得到了上述錯誤 – 2012-02-17 04:53:37

+2

從錯誤消息看來,您似乎正在使用'C++ 98'。如果你使用GCC,那麼使用'--std = C++ 0x'選項來啓用C++ 11。 – Nawaz 2012-02-17 04:56:58

+0

謝謝--std = C++ 0x工作! – 2012-02-17 05:57:49

2

嘗試使用參數顯式調用構造函數。