为方便起见,我想在这个GVEvent联盟中使用一个typedef作为内部GVResponseEvent。
我的尝试给了我编译错误:
warning C4091: 'typedef ' : ignored on left of '_GVEvent' when no variable is declared
error C2143: syntax error : missing ';' before '.'
error C2059: syntax error : '.'
我做错了什么?
typedef struct {
int type ;
int status ;
} GVResponseEvent ;
typedef union _GVEvent {
int type ;
GVResponseEvent gvresponseevent;
} GVEvent ;
typedef GVEvent.GVResponseEvent resp_evt;
int main(int argc, char* argv[])
{
resp_evt.status = 9; *** not working
GVEvent myevt;
myevt.type = 2;
myevt.gvresponseevent.status = 9;
myevt.gvresponseevent.type = 8;
int gvresptype = myevt.gvresponseevent.type;
return 0;
}
答案 0 :(得分:0)
GVResponseEvent
本身就是一种类型。在union _GVEvent
中定义了 。
你可以typedef
这样:
typedef GVResponseEvent resp_evt;
如果在联合中定义了 ,这就是它的样子:
typedef union _GVEvent {
int type ;
typedef struct whatever{ int x; } GVResponseEvent;
GVResponseEvent gvresponseevent;
} GVEvent ;
如果是这种情况,这就是typedef
编辑它的方式:
typedef GVEvent::GVResponseEvent resp_evt;
请注意::
。
在另一个主题上,您可以访问变量而非类型的数据。
如果你有
typedef whatever your_custom_type;
编写your_custom_type.field
的方式与编写int += 10;
由于您正在使用resp_evt
类型(使用typedef
),因此resp_evt.status
无效。正如enobayram提到的,也许你正在寻找指针/引用?
答案 1 :(得分:0)
您的代码行
typedef GVEvent.GVResponseEvent resp_evt;
在语法上是错误的。结构字段不能用作源类型。 typedef的语法是:
typedef old_type new_type;
新类型应该包含*
,[25]
,(int x, long y)
等修饰符。
它的目的是什么?您已经有类型GVResponseEvent
。只需使用它。
答案 2 :(得分:0)
typedef GVEvent.GVResponseEvent
GVResponseEvent不是GVEvent范围内定义的类型。因此,您的代码对编译器或我来说都没有意义。