【问题标题】:syntax failure with vector of vectors向量向量的语法错误
【发布时间】:2019-04-16 10:07:59
【问题描述】:

我阅读了文章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  [...]

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

【问题讨论】:

  • 在我的情况下编译得很好。你试过std::vector&lt;std::vector&lt;int&gt;&gt; v(10, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1 });吗?
  • 1) 由于您收到有关使用 -std=c++11 标志编译的警告,您是否尝试设置它? 2)如果我没记错的话,pre C++-11 vector&lt;vector&lt;int&gt;&gt; v(10, vector&lt;int&gt;(10,1)); 必须是vector&lt;vector&lt;int&gt; &gt; v(10, vector&lt;int&gt;(10,1));
  • @Ayxan 不幸的是,这给我留下了另一个语法错误,我的编译器也抱怨:错误:数字常量之前的预期标识符
  • @AlgirdasPreidžius:1)编译是由一个单独的脚本完成的,我无法更改(我们的机构结构相当复杂......)。所以我没有尝试设置标志,但不幸的是也不能:/ 2)我在 >> 之间添加了额外的空格,但这不是问题。
  • @BlueFire "我在 >> 之间添加了额外的空格,但这不是问题。" 在这种情况下,您不是在编译代码,而是在向我们展示。 It compiles fine even with C++03.

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


【解决方案1】:

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

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++ 标准)。

【讨论】:

  • 我想是这样,但会尽量让它更清楚:对于现有的模拟程序,我想编写额外的功能,其目的与原始程序略有不同。因此,我将添加一个头文件和一个包含所有需要的函数的 cpp 文件,它们可以很容易地与当前代码合并。在头文件中,我想声明(公共)向量矩阵,以便我可以在 .cpp 文件中使用它并稍后在其他地方引用它。所有附加功能都存储在一个类中void className::functionName(ReferenceA, ReferenceB)
  • 很遗憾,您的建议也没有奏效。但是由于这个问题似乎完全依赖于旧的编译器版本,我会尝试说服我的上级进行必要的更新...谢谢(所有)您的帮助!
  • @BlueFire 要明确:向量是类的公共接口的一部分,对吧?它不是一个全局变量,对吧?正如我所说,您需要使用支持 C++11 的编译器(例如,使用 -std=c++11,但 gcc 5.4 会这样做),否则您想要做的事情是不可能的。在旧的 C++ 标准中,唯一的方法是为类定义一个(默认)构造函数,为成员设置默认值。
猜你喜欢
  • 2020-04-19
  • 2021-12-16
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多