2010-07-02 58 views
0

我想聲明我的方法頂部的陣列,但它不是編譯:C++:如何在方法的頂部聲明一個數組?

Foo Bar() 
{ 
    int arr[]; // C2133 

    // … 

    // C2059, C2143, C2143 
    arr[] = {1, 2, 3}; 
} 

什麼我錯在這裏做什麼?

UPDATE我知道C++並不強迫我這樣做,但項目的約定要求在方法頂部聲明所有變量。

+2

什麼項目約定,要求你聲明非特定數組的大小,而不是初始化它們? – YeenFei 2010-07-02 01:34:30

+1

我在這段時間看到過一些瘋狂的約定,但從來沒有強迫你編寫無效代碼的約定。 – 2010-07-02 01:52:41

+1

一個好的編碼慣例需要相反的,在需要而不是更早的地方聲明一個變量。 – starblue 2010-07-03 18:53:42

回答

5

當您在C/C++中聲明數組時,您需要指定大小。如果不指定大小,則需要在同一個聲明語句中定義數組元素,如下所示:

int arr[] = {1, 2, 3}; 
+3

如果您不知道數組的大小並且無法在聲明中指定元素,則需要使用指針並動態分配內存,但這是另一個問題的主題。 – 2010-07-02 00:16:17

+0

如果你帶着指針走,你會失去執行神奇的「= {1,2,3}」的能力,對吧? – 2010-07-02 00:33:53

+1

@Owen右。實際上,如果你在初始化時沒有這樣做,即使數組是在固定大小的棧上聲明的(例如'int arr [3]; arr = {1,2,3} ;'不合法)。該大括號語法僅適用於初始化,不適用於分配。 – 2010-07-02 02:55:46

4

這只是無效的語法。如果你想要做arr = { ... };,它必須是你聲明變量的時候。但是C++不會強制你在函數的開頭聲明變量,所以你可以這樣做:

Foo Bar() { 
    // other stuff goes here 
    // ... 
    int arr[] = {1, 2, 3}; 
} 
1

你不能。無論是項目的慣例需要給,或者您的初始化代碼:

Foo Bar() { 
    int a[3]; 
    ... 
    a[0] = 1; 
    a[1] = 2; 
    a[2] = 3; 
}