我已经写了下面的代码来添加/乘以向量的向量(本质上是多维数组):
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_matrix
和second_matrix
在for each
循环之后被转储了,但是为什么呢?
答案 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);