还望高人指点迷津


typedef struct
{
UINT16 width;
UINT16 bEnabled;
} C_STRUCT;

typedef struct
{
UINT16 dd;
UINT16 cc;
UINT32 bb;
UINT16 aa;
C_STRUCT *data;
} A_STRUCT;

typedef struct
{
UINT16 E;
C_STRUCT *pdata;
}B_STRUCT;

void LoadIcon( UINT16 indexid ,B_STRUCT *icon)
{
根据indexid 对B_STRUCT *icon进行赋值;
}

void main()
{
B_STRUCT pp;
LoadIcon(0,&pp);

static A_STRUCT MM[] =
{
{ D,C,B,A, pp.pdata},
...
};
}
编译的时候报这样的错:erro: initializer element is not constant
请问这是个错误是怎么产生的? 应该怎么改? 我觉得相同的类型怎么会出错呢?
还望高人指点迷津
[720 byte] By [hansl] at [2008-1-9]
# 1
程序不完整?
没看明白
mochen5460-mochen at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 2
报错的位置是

“ { D,C,B,A, pp.pdata},”
这一行,
error: initializer element is not constant
hansl at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 3
初始化静态变量只能使用常量或常量表达式.
你把static去掉就可以了
如果非得用静态变量,只好先定义,后赋值了
alainpro-Alain at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 4
问什么初始化静态变量的时候 只能使用常量或者常量 表达式?
怎么先定义,后赋值? 菜鸟刚接触C 不好意思还烦alainpro(Alain) 解释一番? 辛苦了
hansl at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 5
还有那位热心人 帮忙啊? 跪谢
hansl at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 6
我在
typedef struct
{
UINT16 E;
const C_STRUCT *pdata;
}B_STRUCT;

const B_STRUCT pp;
都加了const,但是编译还是没过去。
去掉static 后编译却顺利通过。我还是有点不明白这是为什么
hansl at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 7
静态变量的初始化是在编译期间完成的,所以你给静态变量初始化的值必须是一个确定的值,而不能是一个变量
先定义
static A_STRUCT MM[10];
然后赋值
for(i=0;i<10;++i)
{
MM[i].dd = D;
MM[i].cc = C;
.....
}
alainpro-Alain at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...
# 8
明白了,谢谢阿
hansl at 2007-10-19 > top of Msdn China Tech,C/C++,C语言...