抱歉,我没有时间对此进行编码,希望我的解释足够彻底。我的一个类有一个vector作为私有成员变量,它的大小在它的构造函数中声明。
现在,我从调试中发现,虽然向量确实在构造函数中分配了它的大小,但是当构造函数返回时它会丢失所有内容(就好像它的内存分配仅在构造函数的范围内一样,即使向量是它的成员变量之一。它又回到了一个空向量)我需要我的向量来保持它的大小超过构造函数的执行,并且想知道我可以做些什么来解决这个问题,因为我初始化它的元素在我的其他一个函数中使用字符串。
追加评论内容
std::vector< std::vector< std::string > > routeInfo(
routeNum, std::vector< std::string >( 2 ) );
这是构造函数中的向量声明,routeNum是一个 在构造函数中较早初始化的变量(已初始化) 没错,那不是问题。)
答案 0 :(得分:3)
我必须从你的代码中假设你不知道如何在c ++中初始化成员变量。这是正确的方法:
class Myclass
{
// the declaration of the variable:
std::vector< std::vector< std::string > > routeInfo;
// declaration of the constructor:
Myclass(int routeNum);
};
// definition of the constructor
Myclass::Myclass(int routeNum)
: routeInfo(routeNum, std::vector< std::string >( 2 ))
{
// some other code
}
如果你只是写:
Myclass::Myclass(int routeNum)
{
std::vector< std::vector< std::string > > routeInfo(
routeNum, std::vector< std::string >( 2 ) );
}
这将创建另一个routeInfo变量,它隐藏了构造函数中的原始变量。要访问成员变量,您必须编写this->routeInfo
而不是routeInfo
,这仍然是零长度。
答案 1 :(得分:0)
听起来像你在某种程度上在你的代码中的某个地方分配了一个向量(或者在你没有指定向量大小的情况下用另一个对象分配)。
如果正确指定了大小,则矢量本身不应更改大小。虽然要检查一件事:
您是否指定了最大容量,或者是否使用保留指定了当前容量?如果您调用reserve,向量应扩展到您分配的空间并保持不变,直到超过它或明确请求更改大小。