我有一个定义好的结构,就像这样:
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;
}我的问题是我不能初始化(注释行)这两个数组,我从VS得到一个error C2059: syntax error : '{'。为什么这是错误的,哪种解决方案是这样做的?
发布于 2012-08-15 20:32:19
不能在数组声明后以这种方式初始化数组的值。只有在一次声明和设置数组时才能使用这种语法,如下所示:
int array[5] = {1, 2, 3, 4, 5};在所有其他地方,您必须设置每个元素。
发布于 2012-08-15 20:32:09
这是错误的,因为这不是初始化,而是设置一个新值。当您声明g_GlobalVar时,您的数组已经初始化。
我看到了两个解决方案: A)创建新的数组,初始化它们,就像你试图做的那样,并在循环中复制新的数组;B)分别设置每个数组的每个条目。
发布于 2012-08-15 20:38:24
特殊的数组初始化器语法只有在数组初始化时才可用。在其他情况下,您必须逐个设置值。
但是,结构赋值(与初始值设定项相结合)提供了一个快捷方式,如下所示:
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);https://stackoverflow.com/questions/11969276
复制相似问题