0

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

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

我的问题是我无法像这样初始化(注释行)这两个数组,我error C2059: syntax error : '{'从 VS得到一个。为什么这是错误的,解决方法是什么?

4

5 回答 5

5

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

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

于 2012-08-15T12:32:08.997 回答
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);
于 2012-08-15T12:38:24.020 回答
1

您不能在声明后以这种方式初始化数组的值。这种语法只有在你同时声明和设置一个数组时才有可能,像这样:

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

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

于 2012-08-15T12:32:19.373 回答
1

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

const GLOBAL_VAR my_const = {{1,2,3,4}, {}, {}, {1,2,3}};  
g_GlobalVar = my_const;
于 2012-08-15T12:38:13.990 回答
0

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

于 2012-08-15T12:33:26.180 回答