声明和访问在构造函数 c++ 中启动的二维向量

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

我在 header 文件中声明了一个 class,其中我有以下二维向量:

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

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

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;

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

所以我的问题是,如何在 header class 中正确声明 2D 向量,然后在 .cpp 文件中(在构造函数或成员函数中)初始化它,这样我可以随处访问它吗?

你正在声明一个新的局部变量,填充它,然后一旦控件离开构造函数范围就会死掉。因此,您实际上并没有填充对象的成员变量,而是填充了另一个在构造函数执行完毕时死亡的变量。

您需要做的是改用 class 的现有成员变量,改进代码并使其更具可读性/可理解性的最佳方法是使用 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.assign(nInputPatterns, vector(2));所以不是这个->。谁能解释一下为什么?