2015-07-10 136 views
0

我在头文件中有两个typedef struct如何访问另一个结构中的结构变量?

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: error: cannot convert to a pointer type ((PlayerFallStruct*) packetClient->playerFall)->fallLevel = 0;

为什么?问题在哪里?我如何访问我的stuct

+0

试试这个:'(packetClient-> playerFall).fallLevel = 0;' – haccks

+0

@haccks谢谢。 – coupraes

回答

0

这很容易!请记住访问结构的规则

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

因此,我们来举个例子。

Struct Client * packet_client;

所以,在你的情况下使用' - >'。你已经创建了playerFallStruct的静态对象。所以,'。'运算符用于访问PlayerFallStruct内的成员。

packet_client->PlayerFall.fallLevel = 0 

希望帮助:) :)编码快乐:) :)

1

在您的Client类型变量(这里是packetClient)中,playerFall成员变量不是指针。您可以尝试使用普通会员参考运营商dot.)访问该帐户。

喜欢的东西

(packetClient->playerFall).fallLevel = 0; 
0

要回答你的问题,你应该能够访问PlayerFallStruct playerFall这样的:

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

注意,这是因为你不包括一个指向PlayerFallStruct playerFall你的Client结构 - 你实际上声明了一个完整的结构。如果你有一个指针定义struct ClientPlayerFallStruct你的语法将工作:

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;