2012-03-25 72 views
0

我想初始化一個結構內的數組設置爲全零。在結構中初始化零數組會導致錯誤

typedef struct month { 
    char name[19]; 
    int yearCounts[10] = { 0 }; 
    struct month *next; 
} MONTH; 

編譯器似乎不想讓我在結構中設置yearCounts值。我得到的是舊的錯誤: 「預期:A,A,A,A,A,A} A或â_attribute_â之前A = A令牌」

這似乎很奇怪,我,因爲確切的聲明之外的結構定義似乎工作得很好。如果我初始化數組而不嘗試設置它的值,那麼它也可以工作。

我錯過了一些愚蠢的東西,還是我只是不允許用結構定義中的值初始化一個數組?

我正在編譯使用gcc在C89標準,如果這有所作爲。

+0

這是唯一可能在C++ – 2012-03-25 10:04:16

+1

只能初始化對象(不是OOP意義上的)。 typedef定義了一個類型,而不是一個對象。 – pmg 2012-03-25 10:09:37

回答

3

Am I missing something stupid, or am I just not allowed to initialize an array with values inside a structure definition?

初始值設定項在結構聲明中沒有意義。

0

由於typedef確實MONTH只(而不是實際的MONTH類型的變量實例的聲明)沒有什麼initialse的定義。

typedef struct month { 
    char name[19]; 
    int yearCounts[10]; 
    struct month *next; 
} MONTH; 

/* declare month as MONTH and initialise it to all zeros. */ 
MONTH month = {0}; 
+0

謝謝一堆。我記住,如果我只是在定義中聲明它,每當我初始化一個新定義時它就會自動發生。 – fmdub 2012-03-25 10:10:03

2

您不能指定初始化作爲類型定義的一部分。您必須等待初始化,直到您定義該類型的對象。使用C89/90編譯器,在沒有首先初始化name的情況下,沒有真正的方法來初始化yearCounts。在C99或更高版本,可以使用指定初始化只yearCounts初始化:

MONTH m = { .yearCounts = {0} }; 
+0

對於像我這樣的新手,很容易理解。謝謝。 – fmdub 2012-03-25 10:27:41

+0

也許還需要補充的是,使用該語法,所有其他字段也被初始化爲'0',因爲這是默認值。 – 2012-03-25 10:50:19