-1

我阅读了使用 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));

--

在向量的向量中找到的版本- 特定语法 适用于我的 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  [...]

在应该使用我的代码的宏大方案中,无法更改编译器版本(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
4

1 回答 1

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 进行大括号初始化,以及声明中的非静态成员初始化(您使用等于而不是括号的第二个错误,但使用较旧的 C++ 标准)。

于 2018-11-13T15:11:01.107 回答