2016-03-09 135 views
-2

所以這個程序在CodeBlocks中完美工作,但我的學校編譯器顯示這個錯誤。這可能是一個簡單的修復。有人可以讓這個代碼在這個C++ 11編譯器上工作並解釋嗎?ISO C++禁止變長數組

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

數組問題後,您的程序有很多錯誤。 – Kason

回答

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

我固定它,我剛剛更換int a[c], b[c];

vector<int>a(c); 
vector<int>b(c); 

現在它的偉大工程!

解決

相關問題