向量向量语法失败

时间:2018-11-13 14:33:06

标签: c++ vector g++ compiler-version

我阅读了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中找到的版本适用于我的日食:

     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  [...]

在应该使用我的代码的宏伟方案中,无法更改编译器版本(对于Ubuntu 5.4.0-6ubuntu1〜16.04.10为gcc 5.4.0 20160609)。因此,我需要上面提到的命令的兼容格式。非常感谢!

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

    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

1 个答案:

答案 0 :(得分:0)

我会在这里猜测您忘记告诉我们您正在尝试声明一个类的数据成员。因此,您实际上是在尝试编译以下内容:

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));
};

只能在带有等号或花括号的类定义中初始化数据成员。不允许使用括号进行初始化。

尝试:

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

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