初始化二维数组时出错
Error while initializing a 2D Array
这是我将 2 个矩阵相乘的程序的一部分。
int m1, m2, n1, n2;
int first[m1][n1], second[m2][n2], result[m1][n2];
cout<<"Please enter no.of rows and columns of the 1st Matrix, respectively :";
cin>>m1>>n1;
我遇到了这些错误
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2057: expected constant expression
error C2087: '<Unknown>' : missing subscript
error C2133: 'first' : unknown size
我在 Visual C++ 6.0(非常旧的版本)中输入这段代码,因为这是目前在学校教给我们的。请帮助我摆脱这些错误。提前致谢。
在使用这些变量(m1、m2、n1、n2)初始化一些数组之前,您必须为这些变量(m1、m2、n1、n2)分配一些数字。当你不给它们一些值时,最初它们是 0。显然,你不能创建一个大小为 0 的数组,这是合乎逻辑的。数组的大小是常量,大小为 0 的数组没有意义。
也许你需要尝试这样的事情:
int m1, m2, n1, n2;
cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :";
cin >> m1 >> n1;
cout << "Please enter no.of rows and columns of the 2st Matrix, respectively :";
cin >> m2 >> n2;
int first[m1][n1], second[m2][n2], result[m1][n2];
当你想像这样初始化一个数组时,你必须使用 const 值(这些值在编译期间是已知的)。
例如:
const int r = 1, c = 2;
int m[r][c];
但是,在您的情况下,您在编译期间不知道大小。所以你必须创建一个动态数组。
这是一个示例片段。
#include <iostream>
int main()
{
int n_rows, n_cols;
int **first;
std::cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :";
std::cin >> n_rows >> n_cols;
// allocate memory
first = new int*[n_rows]();
for (int i = 0; i < n_rows; ++i)
first[i] = new int[n_cols]();
// don't forget to free your memory!
for (int i = 0; i < n_rows; ++i)
delete[] first[i];
delete[] first;
return 0;
}
这是我将 2 个矩阵相乘的程序的一部分。
int m1, m2, n1, n2;
int first[m1][n1], second[m2][n2], result[m1][n2];
cout<<"Please enter no.of rows and columns of the 1st Matrix, respectively :";
cin>>m1>>n1;
我遇到了这些错误
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2057: expected constant expression
error C2087: '<Unknown>' : missing subscript
error C2133: 'first' : unknown size
我在 Visual C++ 6.0(非常旧的版本)中输入这段代码,因为这是目前在学校教给我们的。请帮助我摆脱这些错误。提前致谢。
在使用这些变量(m1、m2、n1、n2)初始化一些数组之前,您必须为这些变量(m1、m2、n1、n2)分配一些数字。当你不给它们一些值时,最初它们是 0。显然,你不能创建一个大小为 0 的数组,这是合乎逻辑的。数组的大小是常量,大小为 0 的数组没有意义。
也许你需要尝试这样的事情:
int m1, m2, n1, n2;
cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :";
cin >> m1 >> n1;
cout << "Please enter no.of rows and columns of the 2st Matrix, respectively :";
cin >> m2 >> n2;
int first[m1][n1], second[m2][n2], result[m1][n2];
当你想像这样初始化一个数组时,你必须使用 const 值(这些值在编译期间是已知的)。 例如:
const int r = 1, c = 2;
int m[r][c];
但是,在您的情况下,您在编译期间不知道大小。所以你必须创建一个动态数组。 这是一个示例片段。
#include <iostream>
int main()
{
int n_rows, n_cols;
int **first;
std::cout << "Please enter no.of rows and columns of the 1st Matrix, respectively :";
std::cin >> n_rows >> n_cols;
// allocate memory
first = new int*[n_rows]();
for (int i = 0; i < n_rows; ++i)
first[i] = new int[n_cols]();
// don't forget to free your memory!
for (int i = 0; i < n_rows; ++i)
delete[] first[i];
delete[] first;
return 0;
}