结构成员初始化

问题描述:

我具有限定的结构像这样的:结构成员初始化

typedef struct tag_GLOBAL_VAR 
{ 
    int array1[4]; 
    int array2[5]; 
    ....... 
    int array20[40]; 
}GLOBAL_VAR; 

该结构用于在某些类定义一个变量:

GLOBAL_VAR g_GlobalVar; 

,然后在这样的另一个类中:

extern GLOBAL_VAR g_GlobalVar; 

class constructor; 

class destructor; 

int class::Start() 
{ 
    //g_GlobalVar.array1 = {1,2,3,4}; 
    //g_GlobalVar.array4 = {1,2,3}; 
    some code; 
} 

我的问题是,我不能初始化(注释行)那样的2个数组,我得到了来自VS的。为什么这是错的,哪个是解决方案呢?

+0

您正在使用C++ 11? – 2012-08-15 12:31:44

+0

我真的不知道......我使用没有SP的vs2008。 – MRM 2012-08-15 12:32:27

+0

有点偏离主题,但考虑使用容器而不是数组 – SingerOfTheFall 2012-08-15 12:32:38

您不能在声明后以这种方式初始化数组的值。

int array[5] = {1, 2, 3, 4, 5}; 

在其他地方,你将不得不设置每一个元素:当你声明并设置数组一次,这样那样的语法是唯一可能的。

这是错误的,因为这不是初始化,而是设置一个新值。声明g_GlobalVar时,您的数组已经初始化。

我看到2解决方案:A)创建新的数组,初始化他们就像你试图做的,并在你的数组循环中复制新的数组; B)分别设置每个阵列的每个条目。

就地初始化({...})仅在POD的C++ 11中受支持。

如果您需要一次初始化几个成员阵列,你可以做以下

const GLOBAL_VAR my_const = {{1,2,3,4}, {}, {}, {1,2,3}}; 
g_GlobalVar = my_const; 
+0

我已经在其他地方看到了这种方法,并且根据我对数组的了解,这将使用这些值初始化前两个数组,其余为'0'。如果我想初始化结构体的第22和第24个数组怎么办?我需要初始化结构的所有前24个数组,对吗? – MRM 2012-08-15 12:42:28

+0

@MRM:是的,您必须初始化所有数组,至少使用{}。 – Andrey 2012-08-15 12:49:44

+0

在你的后一个例子中,你似乎没有使用C++中的数组赋值。 – 2012-08-15 12:49:46

特殊的数组初始化语法只适用于,你猜对了,数组初始化。在其他时候,您必须逐个设置值。

然而,分配结构(与初始值相结合)允许的快捷方式,就像这样:

GLOBAL_VAR temporary = { {1,2,3}, {4,5,6} }; 
g_GlobalVar = temporary; 

其他的解决方案包括使用memcpy

int temp1[] = {1,2,3,4}; 
memcpy(g_GlobalVar.array1, temp1, sizeof temp1);