为什么此向量向量超出范围?

时间:2020-09-24 01:22:45

标签: c++

我已经写了下面的代码来添加/乘以向量的向量(本质上是多维数组):

int matrix_numbers[] = { 1, 2 };

// get rows and columns from user (omitted)

for each (int matrix in matrix_numbers) {
  if (matrix == 1) {
      vector<vector<int>> first_matrix(rows, vector<int>(columns));
      request_matrix_data(first_matrix, rows, columns);
      output_matrix_data(first_matrix, rows, columns);
  }
  else { // matrix == 2
      vector<vector<int>> second_matrix(rows, vector<int>(columns));
      request_matrix_data(second_matrix, rows, columns);
      output_matrix_data(second_matrix, rows, columns);
  }
}

add_them(first_matrix, second_matrix);

我从Visual Studio中收到add_them()函数的以下错误:

error C2065: 'first_matrix': undeclared identifier
error C2065: 'second_matrix': undeclared identifier

我可以从调试器中得知first_matrixsecond_matrixfor each循环之后被转储了,但是为什么呢?

1 个答案:

答案 0 :(得分:3)

因为要在for循环内的if语句中声明它们。 这意味着您只能在该if语句中访问它们。 请参阅variable scope

上的本教程

您可以通过重写它们以使其作用域等于该功能来对其进行修复。

您的迭代器也看起来不对,您也应该重写它。

const int matrix_size = 2;
int matrix_numbers[matrix_size] = { 1, 2 };

vector<vector<int>> first_matrix;
vector<vector<int>> second_matrix;

// get rows and columns from user (omitted)

for (int n = 0; n < matrix_size; n ++) {
  int matrix = matrix_numbers[n];

  if (matrix == 1) {
      first_matrix = vector<vector<int>>(rows, vector<int>(columns));
      request_matrix_data(first_matrix, rows, columns);
      output_matrix_data(first_matrix, rows, columns);
  }
  else { // matrix == 2
      second_matrix = vector<vector<int>>(rows, vector<int>(columns));
      request_matrix_data(second_matrix, rows, columns);
      output_matrix_data(second_matrix, rows, columns);
  }
}

add_them(first_matrix, second_matrix);