0

typedef structヘッダーファイルに2つあります。

typedef struct {
    int fallLevel;
    unsigned long lastStepTime; 
} PlayerFallStruct;

typedef struct {
    int id;
    char* name;
    int x;
    int y;
    PlayerFallStruct playerFall;

} Client;

へのアクセス方法がわかりませんPlayerFallStruct playerFall。((PlayerFallStruct*) packetClient->playerFall)->fallLevel = 0; を使用すると、

コンパイラはエラーをスローします:

Client.c:46:4: エラー: ポインター型に変換できません ((PlayerFallStruct*) packetClient->playerFall)->fallLevel = 0;

なんで?どこに問題がありますか?にアクセスするにはどうすればよいstuctですか?

4

3 に答える 3

3

とても簡単です!!!! 構造体にアクセスするためのルールを覚えておいてください

'.' for static object of structure
'->' for pointer type obj of structure.

それでは、あなたのケースを例に挙げましょう。

クライアントの構造 *packet_client;

したがって、あなたの場合は「->」が使用されます。そして、playerFallStruct の静的オブジェクトを作成しました。そう、 '。' 演算子は、PlayerFallStruct 内のメンバーにアクセスするために使用されます。

packet_client->PlayerFall.fallLevel = 0

それが役立つことを願っています:) :)ハッピーコーディング:) :)

于 2015-07-10T15:51:50.370 に答える
1

Client型変数 (ここではpacketClient)内では、playerFallメンバー変数はポインターではありません。dot通常のメンバー参照演算子( )を使用してアクセスしてみてください.

何かのようなもの

 (packetClient->playerFall).fallLevel = 0;
于 2015-07-10T15:16:13.767 に答える
0

あなたの質問に答えるには、次のようにアクセスできる必要がありますPlayerFallStruct playerFall

struct Client packetClient, *packetClientPtr = &packetClient;
//Fill client...
(packetClient->playerFall).playerFall = 0;

これは、構造体にポインターを含めていないためであることに注意してPlayerFallStruct playerFallくださいClient。実際には、構造体全体を宣言しています。struct Clientへのポインターを使用して定義した場合、構文は機能しPlayerFallStructます。

typedef struct {
    int id;
    char* name;
    int x;
    int y;
    PlayerFallStruct *playerFall; //Note - this is a pointer!

} Client;

これには、この構造体の外に作成することも必要になりPlayerFallStructます (一般的に、これは構造体に構造体を配置するための好ましい手段だと思いますが、結局のところ、それはすべてセマンティクスです):

PlayerFallStruct playerStruct, *playerStructPtr = &playerStruct;
packetClient->playerFallStruct = playerStructPtr;
于 2015-07-10T15:25:20.793 に答える