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) {
我想知道为什么下面的程序会产生这个错误。我试过在线 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) {