我正在尝试使用向量管理一组结构,但不断收到错误信息。
向量在头文件中声明为:
vector< TLE_Values, allocator<TLE_Values> > SavedSatellites;
VS2013非常满意。
结构定义为:
struct TLE_Values
{
string CatalogNum;
string SatelliteName;
string DateStr;
string TimeStr;
string Classification;
double DecayValue;
int ElsetNum;
double InclinationValue;
double RaanValue;
double EccentricityValue;
double ArgPerigeeValue;
double PerigeeAngle;
double AvgSpeed;
double Period;
int OrbitNum;
};
并由构造函数初始化为默认值。
在主程序代码中,确定了我需要的元素数量(CountItemsInFile())后,我尝试使用以下方法展开向量列表:
SavedSatellites.push_back(CountItemsInFile());
然而,这会返回以下编译器错误消息:
error C2664:
'void std::vector<TLE_Values,std::allocator<TLE_Values>>::push_back(const TLE_Values &)' : cannot convert argument 1 from 'int' to 'TLE_Values &&'
1> Reason: cannot convert from 'int' to 'TLE_Values'
1> No constructor could take the source type, or constructor overload resolution was ambiguous.
另一个线程建议需要使用0初始化向量,这不会发生在这样的用户定义类型中。 我错过了什么?哪里出错了?如何使用我的结构创建初始向量? 有很多关于使用类型(int)的向量的文档,但是如果你不使用整数则不多。
答案 0 :(得分:3)
展开矢量使用
SavedSatellites.resize(CountItemsInFile());
如果你只是想为它保留内存,但保持向量的大小不变,并为后续的push_back做好准备而不重新分配内存:
SavedSatellites.reserve(CountItemsInFile());
答案 1 :(得分:1)
docs是关键所在:
void push_back (const value_type& val);
push_back
没有int
,它会占用您vector
所拥有的相同类型的参数。你需要给它一个TLE_Values
对象。
您也不需要预先确定vector
的尺寸;你可以继续致电push_back
直到你完成。