2012-03-25 74 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