2016-08-02 6 views
-1

私は2つのファイル(それぞれに.hと.c)を持っています。私は、ヘッダファイルの1の内側に、次の構造体を定義しています:自分自身へのポインタを含む構造体を定義しtypedefするにはどうすればよいですか?

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

私はtypedefをし、構造体のさまざまな提案組み合わせの数を試みたが、私はまだ私が始めているerror: redefinition of ‘struct client’

を取得しています両方のヘッダーファイルにそれぞれが含まれているという事実と関係があると考えてください。

この構造体を正しく作成していますか?ヘッダーファイルをそれぞれに含めるときに従うべきいくつかの基本的な規則はありますか?

+0

私はあなたの問題は自分自身へのポインタを含む構造体を有することに関連しているとは思いません。 – immibis

+1

この質問の問題は、投稿したコードがそのエラーを生成しないことです。 [最小で完全で検証可能な例](https://stackoverflow.com/help/mcve)が必要です。 – user3386109

+1

あなたが探しているものは[ヘッダーガード]です(https://stackoverflow.com/documentation/c/447/preprocessor-and-macros/7662/header-include-guards#t=201608020345015731289) – user3386109

答えて

2

お互いに依存する構造体が2つある場合は、それらのうちの1つを宣言することができます。

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;

潜在的にあいまいな場合、それは、彼らが別の名前空間に住んでいるので、タグやtypedefの両方に同じ名前を使用するために、法的です。

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

関連する問題