1

抱歉,我没有时间编写代码,希望我的解释足够彻底。我的一个类有一个向量作为私有成员变量,它的大小在其构造函数中声明。

现在,我从调试中发现,虽然向量确实在构造函数中分配了它的大小,但当构造函数返回时它会丢失所有大小(好像它的内存分配只在构造函数的范围内,即使向量是它的成员变量之一。它回到了一个空向量)我需要我的向量在构造函数执行之后保持它的大小,并且想知道我可以做些什么来解决这个问题,因为我用字符串初始化它的元素我的其他功能之一。

从评论中附加内容

std::vector< std::vector< std::string > > routeInfo(
    routeNum, std::vector< std::string >( 2 ) );

这是我的构造函数中向量的声明,routeNum 是一个变量,它在构造函数的早期初始化(正确初始化,这不是问题)。

4

2 回答 2

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它仍然是零长度。

于 2012-08-10T16:26:20.530 回答
0

在我看来,您以某种方式在代码中的某处分配了向量(或者可能在整个对象上分配了另一个您没有指定向量大小的对象)。

如果您正确指定了大小,则矢量本身不应改变大小。虽然要检查一件事:

您是否指定了最大容量,或者您是否使用储备指定了当前容量?如果您调用reserve,向量应该扩展到您分配的空间并保持在那里,直到您超过它或明确请求更改大小。

于 2012-08-10T16:05:09.540 回答