struct成员初始化

时间:2012-08-15 12:29:14

标签: c++ arrays struct

我有一个像这样的定义结构:

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得到error C2059: syntax error : '{'。为什么这是错误的,哪个是解决方案呢?

5 个答案:

答案 0 :(得分:5)

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

我看到2个解决方案:A)创建新数组,像尝试一样初始化它们,并在循环中复制数组中的新数组; B)分别设置每个数组的每个条目。

答案 1 :(得分:2)

特殊数组初始化程序语法仅在数组初始化时可用。在其他时候,您必须逐个设置值。

但是,结构分配(与初始化器结合使用)允许使用快捷方式,如下所示:

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);

答案 2 :(得分:1)

在声明后,您无法以这种方式初始化数组的值。只有在一次声明和设置数组时才能使用这种语法,如下所示:

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

在所有其他地方,您必须设置每个元素。

答案 3 :(得分:1)

如果您需要一次初始化多个成员数组,可以执行以下操作

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

答案 4 :(得分:0)

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