声明和访问在构造函数c++中启动的2D-vector

Declare and access 2D-vector initiated in constructor c++

本文关键字:启动 2D-vector c++ 构造函数 访问 声明      更新时间:2023-10-16

我在头文件中声明了一个类,其中我有以下2D向量:

std::vector< std::vector<int> > inputPatterns;

然后,在.cpp文件中该类的构造函数中,我执行以下操作:

nInputPatterns = 4;
vector< vector<int> > inputPatterns(nInputPatterns, vector<int>(2));
inputPatterns[0][0] = 1;
inputPatterns[0][1] = 1;
inputPatterns[1][0] = 0;
inputPatterns[1][1] = 1;
inputPatterns[2][0] = 1;
inputPatterns[2][1] = 0;
inputPatterns[3][0] = 0;
inputPatterns[3][1] = 0;

但是,现在该类的成员函数不能访问这个2D向量。我认为这是因为我在构造函数中重新声明了它,但我不知道该怎么做。

所以我的问题是,如何在头类中正确声明2D矢量,然后在。cpp文件中初始化它(无论是在构造函数还是成员函数中),这样我就可以在任何地方访问它?

您正在声明一个新的局部变量,并填充它,然后一旦控件超出构造函数作用域就会死亡。因此,您实际上并没有填充对象的成员变量,而是填充了另一个变量,该变量在构造函数完成执行时失效。

您需要做的是使用类的现有成员变量,而改进代码并使其更具可读性/可理解性的最佳方法是使用 this 指针,如下所示:
nInputPatterns = 4;
// means not any inputPatterns, it is explicitly the member variable inputPatterns of "this" current object / instance
this->inputPatterns(nInputPatterns, vector<int>(2)); 
// ..

我的问题的答案似乎是使用inputPatterns。分配(nInputPatterns向量(2));不是这个->。有人能告诉我为什么吗?