-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

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型を作成しているため、意味がありません。enobayram言及しているように、ポインター/リファレンスを探しているのではないでしょうか?typedefresp_evt.status

于 2012-07-17T10:37:43.973 に答える
0

あなたのコード行

typedef GVEvent.GVResponseEvent resp_evt;

は構文的に間違っています。構造体のフィールドはソース型として使用できません。typedef の構文は次のとおりです。

typedef old_type new_type;

新しい型には、、、など*の修飾子があると予想されます。[25](int x, long y)

そして、その目的は何ですか?あなたはすでに type を持っていますGVResponseEvent。ただそれを使用してください。

于 2012-07-17T10:40:01.093 に答える
0

typedef GVEvent.GVResponseEvent

GVResponseEvent は、GVEvent のスコープで定義されたタイプではありません。したがって、あなたのコードはコンパイラにとっても私にとっても意味がありません。

于 2012-07-17T10:53:07.347 に答える