繁体   English   中英

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 中不起作用的原因是因为这是一个可变长度数组,而这些实际上并不是 C++ 的一部分。 一些编译器仍然可以容忍它,但 VS 不会。

无论如何您都无法获得正确结果的原因是因为rc未在此处初始化:

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));

内置数组的大小必须在编译时知道,您不能在运行时设置(或更改)它。

如果您是从教程中单独学习并且本教程正在教您使用内置的 arrays,我建议您从一本书中学习,而不是像上面发布的那样。

简单地说:一个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 对我来说有点困难。 所以,这就是我这样做的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM