结构成员初始化
问题描述:
我具有限定的结构像这样的:结构成员初始化
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的。为什么这是错的,哪个是解决方案呢?
答
您不能在声明后以这种方式初始化数组的值。
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;
答
特殊的数组初始化语法只适用于,你猜对了,数组初始化。在其他时候,您必须逐个设置值。
然而,分配结构(与初始值相结合)允许的快捷方式,就像这样:
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);
您正在使用C++ 11? – 2012-08-15 12:31:44
我真的不知道......我使用没有SP的vs2008。 – MRM 2012-08-15 12:32:27
有点偏离主题,但考虑使用容器而不是数组 – SingerOfTheFall 2012-08-15 12:32:38