如何为union的成员定义typedef

时间:2012-07-17 10:22:02

标签: c++ typedef

为方便起见,我想在这个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;
}

3 个答案:

答案 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范围内定义的类型。因此,您的代码对编译器或我来说都没有意义。