2010-07-02 54 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; 
}