如何定义和typedef包含指向自身的指针的结构?

时间:2016-08-02 02:37:37

标签: c struct typedef

我有两个文件(每个文件都是.h和.c)。我在其中一个头文件中定义了以下结构:

 typedef struct Client{
    int fd;
    struct in_addr ipaddr;
    struct Player * p;
    struct Client * next;
 }Client;

我尝试了很多不同的typedef和struct的组合,但我仍然得到了error: redefinition of ‘struct client’

我开始认为这与两个头文件包含彼此的事实有关。

我是否正确创建了此结构?当在彼此包含头文件时,我应该遵循一些基本规则吗?

2 个答案:

答案 0 :(得分:2)

如果你有两个相互依赖的结构,你可以转发声明其中一个结构。

typedef struct Client Client;   // forward declaration of struct Client

typedef struct Player {
    ...
    Client *client;
    ...
} Player;

struct Client{
    int fd;
    struct in_addr ipaddr;
    Player * p;
    Client * next;
};

答案 1 :(得分:0)

typedef struct x3 { ... } x3;

对于标记和typedef使用相同的名称是合法的,如果可能不明确,因为它们位于不同的名称空间中。

http://c-faq.com/struct/typedef.html