2016-08-02 29 views
-1

Ich habe zwei Dateien (.h und .c für jeden von ihnen). Ich bin die Definition der folgenden Struktur in einem der Header-Dateien:Wie definiere und schreibe ich eine Struktur, die einen Zeiger auf sich selbst enthält?

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

ich eine Reihe von verschiedenen vorgeschlagenen Kombinationen von typedef versucht haben und Struktur, aber ich bin noch immer error: redefinition of ‘struct client’

Ich fange an denke, das hat mit der Tatsache zu tun, dass beide Header-Dateien einander enthalten.

Ich erstelle diese Struktur richtig? Gibt es einige grundsätzliche Regeln, denen ich beim Einfügen von Header-Dateien folgen sollte?

+0

Ich glaube nicht, Ihr Problem einen Zeiger auf sich selbst bezogen ist, eine Struktur zu haben, enthält. – immibis

+1

Das Problem mit dieser Frage ist, dass der von Ihnen gepostete Code diesen Fehler nicht erzeugt. Ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) wird benötigt. – user3386109

+1

Meine beste Vermutung ist, dass was Sie suchen, ist [Kopfwächter] (https://stackoverflow.com/documentation/c/447/preprocessor-and-macros/7662/header-include-guards#t=201608020345015731289) – user3386109

Antwort

2

Wenn Sie zwei Strukturen haben, die voneinander abhängen, können Sie einen von ihnen weiterleiten.

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

typedef struct x3 { ... } x3;

Es ist legal, wenn potenziell unklar, für den gleichen Namen zu verwenden, um sowohl den Tag und den typedef, da sie in eigenem Namensraum leben.

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