C++表达式必须有常量值
C++expression must have constant value
我用 dev c++ 编写了这段代码,它可以工作,但是当我尝试在 Visual Studio 中 运行 它时,它给出了一个错误,例如 expression must have constant value.
#include <iostream>
using namespace std;
int main() {
int r, c, j;
int matrix[r][c];
cout << "Enter the size of matrix: ";
cin >> j;
for (r = 0; r < j; r++) {
for (c = 0; c < j; c++) {
cout << "matrix" << "[" << r << "]" << "[" << c << "] = ";
cin >> matrix[r][c];
}
}
cout << "\n";
for (int i = 0; i < j; i++) {
for (int k = 0; k < j; k++) {
cout << " "<<matrix[i][k] << " ";
}
cout << "\n";
}
return 0;
}
它在 Visual Studio 中不起作用的原因是因为那是 variable-length array,而它们实际上不是 C++ 的一部分。尽管如此,一些编译器可以容忍它,但 VS 不会。
无论如何都得不到正确结果的原因是r
和c
没有在这里初始化:
int r, c, j;
int matrix[r][c];
这是未定义的行为。我的建议是使用嵌套的 std::vector
(并在 阅读尺寸后使其成为 :
#include <vector>
...
int r, c, j;
cout << "Enter the size of matrix: ";
cin >> j;
std::vector<std::vector<int>> matrix(j, std::vector<int>(j));
内置数组的大小必须在编译时已知,您不能在 运行 时设置(或更改)它。
如果您是独自从教程中学习,而本教程教您使用内置数组,我建议您从书本中学习,而不是像上面发布的那样。
简单地说:一个std::vector<int>
就像一个整数数组,你可以在运行时改变它的大小。内置 int matrix[5][5]
的尺寸无法在 运行 时更改,必须在编写程序时决定,效率不高。
我已经更新了我的代码:
#include <iostream>
using namespace std;
int main() {
int r, c, j,i,k;
cout << "Enter the size of matrix: ";
cin >> j;
int matrix[j][j];
for (r = 0; r < j; r++) {
for (c = 0; c < j; c++) {
cout << "matrix" << "[" << r << "]" << "[" << c << "] = ";
cin >> matrix[r][c];
}
}
cout << "\n";
for ( i = 0; i < j; i++) {
for ( k = 0; k < j; k++) {
cout << " "<<matrix[i][k] << " ";
}
cout << "\n";
}
}
现在,它可以与 Devc++ 一起使用。
我是 c++ 初学者,理解起来有点困难 std::vector。
所以,这就是我这样做的原因。
我用 dev c++ 编写了这段代码,它可以工作,但是当我尝试在 Visual Studio 中 运行 它时,它给出了一个错误,例如 expression must have constant value.
#include <iostream>
using namespace std;
int main() {
int r, c, j;
int matrix[r][c];
cout << "Enter the size of matrix: ";
cin >> j;
for (r = 0; r < j; r++) {
for (c = 0; c < j; c++) {
cout << "matrix" << "[" << r << "]" << "[" << c << "] = ";
cin >> matrix[r][c];
}
}
cout << "\n";
for (int i = 0; i < j; i++) {
for (int k = 0; k < j; k++) {
cout << " "<<matrix[i][k] << " ";
}
cout << "\n";
}
return 0;
}
它在 Visual Studio 中不起作用的原因是因为那是 variable-length array,而它们实际上不是 C++ 的一部分。尽管如此,一些编译器可以容忍它,但 VS 不会。
无论如何都得不到正确结果的原因是r
和c
没有在这里初始化:
int r, c, j;
int matrix[r][c];
这是未定义的行为。我的建议是使用嵌套的 std::vector
(并在 阅读尺寸后使其成为 :
#include <vector>
...
int r, c, j;
cout << "Enter the size of matrix: ";
cin >> j;
std::vector<std::vector<int>> matrix(j, std::vector<int>(j));
内置数组的大小必须在编译时已知,您不能在 运行 时设置(或更改)它。
如果您是独自从教程中学习,而本教程教您使用内置数组,我建议您从书本中学习,而不是像上面发布的那样。
简单地说:一个std::vector<int>
就像一个整数数组,你可以在运行时改变它的大小。内置 int matrix[5][5]
的尺寸无法在 运行 时更改,必须在编写程序时决定,效率不高。
我已经更新了我的代码:
#include <iostream>
using namespace std;
int main() {
int r, c, j,i,k;
cout << "Enter the size of matrix: ";
cin >> j;
int matrix[j][j];
for (r = 0; r < j; r++) {
for (c = 0; c < j; c++) {
cout << "matrix" << "[" << r << "]" << "[" << c << "] = ";
cin >> matrix[r][c];
}
}
cout << "\n";
for ( i = 0; i < j; i++) {
for ( k = 0; k < j; k++) {
cout << " "<<matrix[i][k] << " ";
}
cout << "\n";
}
}
现在,它可以与 Devc++ 一起使用。 我是 c++ 初学者,理解起来有点困难 std::vector。 所以,这就是我这样做的原因。