C++ 在声明期间将值初始化为二维向量

C++ 在声明期间将值初始化为二维向量,c++,vector,declaration,C++,Vector,Declaration,我已经这样声明了我的二维数组。但是由于这个原因会出现错误 vector <vector <int> > plain(vector <int>(4,0)) = {{23,43,45,56}, {67,85,13,59}, {48,23,9,57},

我已经这样声明了我的二维数组。但是由于这个原因会出现错误

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
向量平面(向量(4,0))={{23,43,45,56}, {67,85,13,59}, {48,23,9,57}, {24,52,90,12}}; rijndael.cpp:12:51:错误:应为“,”或“;”在“=”标记之前 rijndael.cpp:57:1:错误:输入末尾应为“}” 所有之前的分号都已正确分配。 你能告诉我在这个声明中我错在哪里吗

我删除了构造函数调用,现在我的声明是

vector <vector <int> > plain/*(vector <int>(4,0))*/  = {{23,43,45,56},
                                                        {67,85,13,59},
                                                        {48,23,9,57},
                                                        {24,52,90,12}};
向量平面/*(向量(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> >’
rijndael.cpp:15:19:错误:在C++98中,“plain”必须由构造函数初始化,而不是由“{…}”初始化
rijndael.cpp:15:19:错误:从括号内的初始值设定项列表中推断需要#包含
rijndael.cpp:15:19:错误:从括号内的初始值设定项列表中推断需要#包含
rijndael.cpp:15:19:警告:扩展初始值设定项列表仅适用于-std=c++0x或-std=gnu++0x
rijndael.cpp:15:19:错误:无法将“{23,43,45,56}、{67,85,13,59}、{48,23,9,57}、{24,52,90,12}”转换为“std::vector”
我如何纠正这一点? 非常感谢您的帮助。

您不能同时拥有构造函数调用和列表初始化,请坚持使用一个,例如:

vector<vector<int>> plain{{23,43,45,56},
                             {67,85,13,59},
                             {48,23,9,57},
                             {24,52,90,12}};
向量平面{{23,43,45,56},
{67,85,13,59},
{48,23,9,57},
{24,52,90,12}};
(对于列表初始化,可以省略
=
。)


在编辑时:嗯,错误解释了一切,阅读它会有所帮助。列表初始化需要C++11模式。如果您不想这样做,您必须使用ctor进行复制以准备2D数组,然后在构造后填充它。

尝试使用参数显式调用构造函数。

它不起作用。我在问题的编辑部分从错误消息中得到了上面提到的错误,似乎您正在使用
C++98
。如果您使用的是GCC,那么使用
--std=c++0x
选项来启用c++11。