我有一个像这样的定义结构:
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 : '{'
。为什么这是错误的,哪个是解决方案呢?
答案 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中受支持。