首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构成员初始化

结构成员初始化
EN

Stack Overflow用户
提问于 2012-08-15 20:29:14
回答 5查看 403关注 0票数 0

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

代码语言:javascript
复制
typedef struct tag_GLOBAL_VAR
{
    int array1[4];
    int array2[5];
    .......
    int array20[40];
 }GLOBAL_VAR;

此结构用于定义某个类中的变量:

代码语言:javascript
复制
GLOBAL_VAR g_GlobalVar;

然后在另一个类中使用,如下所示:

代码语言:javascript
复制
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 : '{'。为什么这是错误的,哪种解决方案是这样做的?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-15 20:32:19

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

代码语言:javascript
复制
int array[5] = {1, 2, 3, 4, 5};

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-15 20:32:09

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

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

票数 5
EN

Stack Overflow用户

发布于 2012-08-15 20:38:24

特殊的数组初始化器语法只有在数组初始化时才可用。在其他情况下,您必须逐个设置值。

但是,结构赋值(与初始值设定项相结合)提供了一个快捷方式,如下所示:

代码语言:javascript
复制
GLOBAL_VAR temporary = { {1,2,3}, {4,5,6} };
g_GlobalVar = temporary;

其他解决方案包括使用memcpy

代码语言:javascript
复制
int temp1[] = {1,2,3,4};
memcpy(g_GlobalVar.array1, temp1, sizeof temp1);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11969276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档