向量向量的语法错误

syntax failure with vector of vectors

看了文章Initializing a vector of vectors having a fixed size with boost assign应该正好满足我的要求:初始化一个可以在两个方向上任意扩展的向量的类矩阵向量(我想用它来提取和分组一个选择更大列表中的值)。

但是,前2个答案给出的解决方案

    vector<vector<int>> v(10, vector<int>(10,1));        

在我的 CDT_eclipse 中提示语法错误,我的编译器提示以下错误:

     error: expected identifier before numeric constant
     vector <vector <int> > v(10, vector <int>(10,1));

--

vector of vector - specific syntax 中找到的版本适用于我的 eclipse:

     vector<vector<int>> v = vector<vector<int>>(n, vector<int>(n, 0));        

但是它会提示我的编译器发出警告:

    vector warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11  [...]

更改编译器版本(gcc 5.4.0 20160609 for Ubuntu 5.4.0-6ubuntu1~16.04.10)在应该使用我的代码的宏伟计划中是不可能的。所以我需要上面提到的命令的兼容公式。非常感谢!

编辑:我的两次主要尝试如下所示:

    vector <vector <int> > v(10, vector <int>(10,1));   --> syntax error
    vector <vector<int> > v = vector <vector<int> >(1, vector<int>(1, 0));   --> compiler error

我猜这里您忘记告诉我们您正在尝试为 class 声明一个数据成员。所以你真的在尝试编译这样的东西:

struct A {
    vector <vector <int> > v(10, vector <int>(10,1));       
};

struct A {
    vector <vector<int> > v = vector <vector<int> >(1, vector<int>(1, 0));
};

数据成员只能在 class 定义中用等号或大括号初始化。不允许带括号的初始化。

尝试:

struct A {
    vector<vector<int>> v{10, vector<int>(10,1)};        
};

在任何情况下,你至少需要 C++11 来进行大括号初始化,以及声明中的非静态成员初始化(你使用等号而不是括号的第二个错误,但使用旧的 C++ 标准).