ISO C++ 禁止可变长度数组 'arrayz' [-Wvla],已经在 c++ 在线 gdb 编译器上尝试过并且运行良好

ISO C++ forbids variable length array 'arrayz' [-Wvla], Tried already on a c++ online gdb compiler and it runs fine

我想知道为什么下面的程序会产生这个错误。我试过在线 gdb 编译器,它工作正常。我在网上搜索过,有些人建议使用向量而不是数组,但我不能,因为我需要在这里使用数组。谁能为我的程序提出一些建议以使其正常工作?

我必须通过 VPL 提交这个程序,它在 linux 上 运行 并且有一个 -pedantic 错误标志。

程序将根据用户输入输出方差 (var)。

#include <iostream>
using namespace std;

double jum(double arrayz[], int y) {
   double total=0, jumlah;
   for (int i=0; i<y; ++i) {
       total+=arrayz[i];
   }
   jumlah = total/y;
   return jumlah;
}
double rata2(double arrayz[], int y) {
   double total=0,average;
   for (int i=0; i<y; ++i) {
       total+=arrayz[i];
   }
   average = total/y;
   return average;
}
int main() {
    double data,average,jumlah;
    int y;
    cin >> y;
    double arrayz[y]={};
    for (int i=0; i<y; ++i) {
        cin >> data;
        arrayz[i]=data;
    }
    average=rata2(arrayz, y);
    for (int i=0; i<y; ++i) {
        arrayz[i]=(arrayz[i]-average)*(arrayz[i]-average);
    }
    jumlah=jum(arrayz, y);
    cout << "Variance : " << jumlah;
    return 0;
}

任何答案将不胜感激!

如果你真的不会使用std::vector,那么就这样做:

double *arrayz = new double[y];

然后,在程序结束时,再次释放内存:

delete[] arrayz;

I am wondering why the following program produces this error. I have tried on the online gdb compiler and it works fine.

的确,VLA 实际上不是 C++ 的一部分,但一些编译器仍然允许它作为编译器扩展。那些允许它的通常可以配置为在您这样做时发出警告,正如您在 -pedantic.

中学到的那样

但是你真的可以不用std::vector吗?被要求写一个C++程序,却不被允许使用这样一个基本的容器,这看起来很奇怪。在那种情况下,程序也可能是 C 语言,其中允许 VLA。你会像这样制作一个矢量:

std::vector<int> arrayz(y);

并更改函数签名以引用这样的一个:

double jum(std::vector<int> &arrayz, int y) {
double rata2(std::vector<int> &arrayz, int y) {