一位同事根据一些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))
但不确定这是否正确,因为代码会出现故障。
所以有两个问题,
是否可以使用某些选项/开关按原样编译代码?
如果不知道应该如何声明和设置这些载体?
答案 0 :(得分:0)
nut(3,3)
尝试将3
用作内部std::vector<int>
的初始值设定项。
但是,std::vector
有一个explicit
构造函数,这就是它无法编译的原因。如您所见,显式构造函数必须使用nut(3, std::vector<int>(3))
显式编写类型。
一些较旧的编译器附带vector
未将构造函数标记为explicit
,这可以解释同事的观察结果。