-2

为方便起见,我想在此 GVEvent 联合中为内部 GVResponseEvent 使用 typedef。

我的尝试给了我编译错误:

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

3 回答 3

0

typedef GVEvent.GVResponseEvent

GVResponseEvent 不是在 GVEvent 范围内定义的类型。因此,您的代码对编译器或我都没有意义。

于 2012-07-17T10:53:07.347 回答
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提到的,也许您正在寻找指针/参考?

于 2012-07-17T10:37:43.973 回答
0

你的代码行

typedef GVEvent.GVResponseEvent resp_evt;

在语法上是错误的。struct 的字段不能用作源类型。typedef 的语法是:

typedef old_type new_type;

预计新类型将具有修饰符,例如*, [25],(int x, long y)等。

它的目的是什么?你已经有了 type GVResponseEvent。就用它吧。

于 2012-07-17T10:40:01.093 回答