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

时间:2012-02-17 04:37:37

标签: c++ vector declaration

我已经宣布了我的二维数组。但由于那个

导致错误
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> >’

我该如何纠正这个问题? 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

你不能两者一个构造函数调用一个列表初始化,坚持一个,例如:

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

(您可以省略=列表初始化。)

在您的编辑中:嗯,错误解释了一切,阅读它会有所帮助。您需要C ++ 11模式进行列表初始化。如果你不想这样,你将不得不用ctor复制准备2D阵列,然后在施工后填写。

答案 1 :(得分:2)

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