2015-01-01 105 views
0

錯誤而聲明一個函數內部靜態數組與功能參數靜態數組定義誤差C++

int fun(int x) 
{ 
     int a[x]; //No Error 
     static int b[x]; //Error "storage size of x is not constant 
     int *f = new int[x+1]; //NO ERROR--NEW OPERATOR USED TO DEFINE THE ARRAY 
} 

什麼應在第二線被改變序聲明數組「b」的沒有任何錯誤。

+0

您如何看待編譯器的建議?在這種情況下,你應該使用'std :: vector <>' – quantdev

+1

這裏的根本問題是'const int b [x]'在編​​譯時分配內存*所以'x'不能是一個變量(它的值在編譯時不知道),而'int * f = new int [x + 1]'在*運行時分配內存*(因爲'new'),所以'x'可以是一個變量。正如@quantdev所說,使用不同的類型,或者使用動態內存分配,例如'int * b = new int [x];'。 – lurker

+1

它也沒用,如果它工作。你會在運行時創建一個const數組,並且無法用有用的數據初始化它。 – Unimportant

回答

1

無法聲明具有非常量存儲大小的'const'數組。

而是使用一個向量。

int fun(int x) 
{ 
    const int b[x]; //Error "storage size of x is not constant 
    vector<int> b(x); //ok 
} 

另外int a [x]也是不正確的。 C99確實支持非常量數組大小,但通常x必須是常數。

+0

'vector '不是'const int []'的替代品,因爲他想存儲'const int'。 –

+0

@ Jean-BaptisteYunès:然後做'矢量'並提供初始化數據。 –

+0

@BenVoigt:隨意進行這些更改。 – Jobs

1

你的問題是你不能在不初始化的情況下定義一個const數組的數組,如果它是一個動態大小,則無法初始化它!