簡體   English   中英

聲明/編譯向量的2d向量

[英]declaring / compiling 2d vector of vectors

一位同事為我提供了基於一些Celestrak衛星代碼http://celestrak.com/software/vallado/cpp.zip的c ++代碼包。

在幾個地方代碼,即coordfk5.cpp聲明矢量的向量

std::vector< std::vector<double> > prec, nut(3,3), st, stdot, pm, pmp

nut(3,3)和類似的聲明無法在我的系統上編譯,但對於他的同事以及可能已經下載了原始軟件包的其他同事而言,則不會。

stl_vector.h:實例化'void std :: vector <_Tp,_Alloc> :: _ M_initialize_dispatch(_Integer,_Integer,std :: __ true_type)[with _Integer = int; _Tp = std :: vector; _Alloc = std :: allocator>]':stl_vector.h:404:55:需要'std :: vector <_Tp,_Alloc> :: vector(_InputIterator,_InputIterator,const allocator_type&)[with _InputIterator = int; _Tp = std :: vector; _Alloc = std :: allocator>; std :: vector <_Tp,_Alloc> :: allocator_type = std :: allocator>]'stl_vector.h:1166:59:錯誤:沒有匹配函數來調用'std :: vector> :: _ M_fill_initialize(std :: vector) > :: size_type,int&)'_M_fill_initialize(staticcast(__ n),__value);

我使用的是gcc版本4.8.1,同事使用的是4.6.3。 我嘗試添加-std = c ++ 98等選項無濟於事。

我可以通過更改為eg來獲取編譯代碼

 nut(3,std::vector<double>(3))

但不確定這是否正確,因為代碼會導致段錯誤。

那么兩個問題,

是否可以使用某些選項/開關按原樣編譯代碼?

如果不知道應該如何聲明和設置這些向量?

nut(3,3)嘗試使用3作為內部std::vector<int>初始化器。

但是, std::vector有一個explicit構造函數,這就是它不能編譯的原因。 正如您所發現的,顯式構造函數必須使用nut(3, std::vector<int>(3))顯式編寫類型。

一些較舊的編譯器帶有一個vector ,該vector沒有將構造函數標記為explicit ,這可以解釋同事的觀察結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM