ISO C ++禁止可变长度数组

时间:2016-03-09 01:24:11

标签: arrays

所以这个程序在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;
}

谢谢!

2 个答案:

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

现在效果很好!

解决