所以这个程序在CodeBlocks中运行得很好,但是我的学校编译器显示了这个错误。这可能是一个简单的修复。有人可以使这个代码在这个c ++ 11编译器上工作并解释吗?
error: ISO C++ forbids variable length array ‘a’ [-Werror=vla]
int a[c], b[c];
^
error: ISO C++ forbids variable length array ‘b’ [-Werror=vla]
int a[c], b[c];
^
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int i,j,l;
cout<<"Unesite cjelobrojni parametar n: ";
int n;
cin>>n;
if(n==1) cout<<setw(4)<<1;
else{
int c(n);
int a[c], b[c]; //Compiler gives error here
for(int k=0; k<c; k++) {
a[0]=1;
a[k]=0;
}
for(i=0; i<c; i++) {
for(j=0; j<c; j++)
if(a[j]!=0)
cout<<setw(4)<<a[j];
cout<<endl;
for(l=c-1; l>0; l--)
b[l]=a[l-1]+a[l];
for(int p=1; p<c; p++) a[p]=b[p];
}
}
return 0;
}
谢谢!
答案 0 :(得分:0)
如果您使用new来创建数组,则必须提供const int。 因此,使用new来创建动态数组。由于您的索引来自运行时,您不能使用静态内存分配(静态数组),您必须使用动态内存分配来在运行时创建数组。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int i, j, l;
cout << "Unesite cjelobrojni parametar n: ";
int n;
cin >> n;
if (n == 1) cout << setw(4) << 1;
else{
int c(n);
//int a[c], b[c]; //Compiler gives error here
int* a = new int[c];
int* b = new int[c];
for (int k = 0; k<c; k++) {
a[0] = 1;
a[k] = 0;
}
for (i = 0; i<c; i++) {
for (j = 0; j<c; j++)
if (a[j] != 0)
cout << setw(4) << a[j];
cout << endl;
for (l = c - 1; l>0; l--)
b[l] = a[l - 1] + a[l];
for (int p = 1; p<c; p++) a[p] = b[p];
delete[] a, b; //using new should delete by yourself
}
}
return 0;
}
答案 1 :(得分:-1)
我修好了,我刚刚更换了int a[c], b[c];
与
vector<int>a(c);
vector<int>b(c);
现在效果很好!
解决