声明/编译向量的2d向量

时间:2015-02-11 11:07:07

标签: c++

一位同事根据一些Celestrak卫星代码http://celestrak.com/software/vallado/cpp.zip向我提供了一套c ++代码。

在几个地方,代码,即coordfk5.cpp声明了像

这样的向量的向量
std::vector< std::vector<double> > prec, nut(3,3), st, stdot, pm, pmp

坚果(3,3)和类似的声明不会在我的系统上编译,但是对于他的同事以及可能是已下载原始包的其他人而言。

  

stl_vector.h:实例化&#39; void std :: vector&lt; _Tp,_Alloc&gt; :: _ M_initialize_dispatch(_Integer,_Integer,std :: __ true_type)[with _Integer = int; _Tp = std :: vector; _Alloc = std :: allocator&gt;]&#39;:   stl_vector.h:404:55:需要来自&#39; std :: vector&lt; _Tp,_Alloc&gt; :: vector(_InputIterator,_InputIterator,const allocator_type&amp;)[with _InputIterator = int; _Tp = std :: vector; _Alloc = std :: allocator&gt ;; std :: vector&lt; _Tp,_Alloc&gt; :: allocator_type = std :: allocator&gt;]&#39;   stl_vector.h:1166:59:错误:没有匹配函数来调用&#39; std :: vector&gt; :: _ M_fill_initialize(std :: vector&gt; :: size_type,int&amp;)&#39;       _M_fill_initialize(static_cast(__ n),__ value);

我在gcc版本4.8.1上,同事在4.6.3上。我尝试添加-std = c ++ 98等选项无济于事。

我可以通过更改为例如

来获取编译代码
 nut(3,std::vector<double>(3))

但不确定这是否正确,因为代码会出现故障。

所以有两个问题,

是否可以使用某些选项/开关按原样编译代码?

如果不知道应该如何声明和设置这些载体?

1 个答案:

答案 0 :(得分:0)

nut(3,3)尝试将3用作内部std::vector<int>的初始值设定项。

但是,std::vector有一个explicit构造函数,这就是它无法编译的原因。如您所见,显式构造函数必须使用nut(3, std::vector<int>(3))显式编写类型。

一些较旧的编译器附带vector未将构造函数标记为explicit,这可以解释同事的观察结果。