声明和访问在构造函数 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));所以不是这个->。谁能解释一下为什么?
我在 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));所以不是这个->。谁能解释一下为什么?