Reputation: 29
I've written the code below to add/multiply a vector of vectors (a multidimensional array, essentially):
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);
I'm getting the following errors from Visual Studio for the add_them()
function:
error C2065: 'first_matrix': undeclared identifier
error C2065: 'second_matrix': undeclared identifier
I can tell from the debugger that first_matrix
and second_matrix
are being dumped after the for each
loop, but why is that?
Upvotes: 1
Views: 96
Reputation: 965
Because you are declaring them within the if statement inside the for loop. This means you can only access them within that if statement. See this tutorial on variable scope
You can fix them by rewriting them to have a scope equal to the function.
Your iterator also looks wrong, you should rewrite this also.
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);
Upvotes: 3