Cヘッダーファイルで定義された自己参照構造体はエラーを生成します

スミック

ジェネリック型の二重リンクリストのマクロを含むヘッダーファイルを書き込もうとしています。

ノードは次のように定義されます。

#define node(T)                \
    struct node_##T            \
    {                          \
        T val;                 \
        struct node_##T *next; \
        struct node_##T *prev; \
    }

次にnode(T)linkedlist(T)構造体の作成に使用しています

#define linkedlist(T)       \
    struct linkedlist_##T   \
    {                       \
        unsigned int count; \
        node(T) *head;      \
        node(T) *end;       \
    }

最後に、alinkedlist(Student) ll;が宣言されます。これはnode(Student)、コンパイル時にこのエラーを呼び出して生成します。

error: redefinition of ‘struct node_Student’

エラーstruct node_##Tは、最初に宣言された行で発生します。

興味深いことに、次のように構造体定義の最後にセミコロンを挿入すると、エラーがなくなります。

        . . . .
        struct node_##T *prev; \
    };

ただし、宣言node(T) N;が不可能になるため、これを行うことはできません

可能な修正は何でしょうか?

タンビアバダー

コンパイラは完全に正しいです。構造体を再宣言しています。リンクリストの定義を次のように変更します

#define linkedlist(T)       \
    struct linkedlist_##T   \
    {                       \
        unsigned int count; \
        struct node_##T *head;     \
        struct node_##T *end;      \
    };

代わりに。どこかに行く前にnode(T)、それぞれT別々の行を用意する必要がありますlinkedlist(T)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ヘッダーファイルで定義されている構造体のリストを取得します

分類Dev

ヘッダーファイルで構造体を宣言し、.cファイルで定義するにはどうすればよいですか。

分類Dev

Swiftはcで定義された構造体のダブルポインターを定義します

分類Dev

ヘッダーファイルで定義された構造体を関数パラメーターとして使用する場合、「不完全な型は許可されません」

分類Dev

Cヘッダーファイルで宣言された構造体-gccmallocエラー

分類Dev

C-ヘッダーファイルの構造体定義

分類Dev

ヘッダーファイルの構造体がソースファイルにエラーを生成する

分類Dev

ヘッダーファイルの省略された構造体の再定義は標準に準拠していますか?

分類Dev

ヘッダーファイルの構造体定義で行われた文字列宣言

分類Dev

.cファイルのヘッダーから構造体を使用しようとすると型エラーが発生するのはなぜですか?

分類Dev

ヘッダーファイルを宣言した後のC ++構造体が認識されない

分類Dev

ヘッダーファイルから既存の構造体に演算子定義を追加するにはどうすればよいですか?

分類Dev

CGoがヘッダーファイルで宣言された構造体を認識しないのはなぜですか?

分類Dev

メインプログラムのヘッダーで定義されたスタック構造体の配列のデータ型を定義する

分類Dev

不透明な構造体定義を別のヘッダーファイルに入れる

分類Dev

C ++では、ソースファイルで定義されている間にヘッダーファイルでデータ構造を宣言するにはどうすればよいですか?

分類Dev

c ++-ヘッダーファイルで使用するときに構造体が認識されない

分類Dev

ヘッダーファイルの問題:複数定義エラー。ここで最初に定義された

分類Dev

ヘッダーファイル内で定義された複数の構造-それらを別々のhファイルとcppファイルに移動する必要があります

分類Dev

Cエラー:関数と構造体がインクルードされたヘッダーファイルのメンバーであるにもかかわらず、関数とストレージサイズの暗黙の宣言が不明です

分類Dev

C ++でヘッダーファイルなしで構造体と関数をリンクする

分類Dev

.ccファイルによってアクセスおよび入力されるヘッダーファイル内の構造体を宣言します

分類Dev

別のヘッダーファイル内で構造体を宣言すると、LNK2001エラーが発生するのはなぜですか?

分類Dev

ヘッダーファイルを使用した複数定義エラー

分類Dev

匿名構造体フィールドを持つ構造体が、その型のエイリアスで定義されたメソッドを満たさないのはなぜですか?

分類Dev

ヘッダーファイルの変更された定義をCで表示する

分類Dev

Cのヘッダーファイル内の構造体を認識する

分類Dev

ObjectiveC-ヘッダーファイルでtypedef構造体を使用する

分類Dev

ヘッダーファイルで宣言された構造体変数を複数のソースファイルにインクルードするにはどうすればよいですか?

Related 関連記事

  1. 1

    ヘッダーファイルで定義されている構造体のリストを取得します

  2. 2

    ヘッダーファイルで構造体を宣言し、.cファイルで定義するにはどうすればよいですか。

  3. 3

    Swiftはcで定義された構造体のダブルポインターを定義します

  4. 4

    ヘッダーファイルで定義された構造体を関数パラメーターとして使用する場合、「不完全な型は許可されません」

  5. 5

    Cヘッダーファイルで宣言された構造体-gccmallocエラー

  6. 6

    C-ヘッダーファイルの構造体定義

  7. 7

    ヘッダーファイルの構造体がソースファイルにエラーを生成する

  8. 8

    ヘッダーファイルの省略された構造体の再定義は標準に準拠していますか?

  9. 9

    ヘッダーファイルの構造体定義で行われた文字列宣言

  10. 10

    .cファイルのヘッダーから構造体を使用しようとすると型エラーが発生するのはなぜですか?

  11. 11

    ヘッダーファイルを宣言した後のC ++構造体が認識されない

  12. 12

    ヘッダーファイルから既存の構造体に演算子定義を追加するにはどうすればよいですか?

  13. 13

    CGoがヘッダーファイルで宣言された構造体を認識しないのはなぜですか?

  14. 14

    メインプログラムのヘッダーで定義されたスタック構造体の配列のデータ型を定義する

  15. 15

    不透明な構造体定義を別のヘッダーファイルに入れる

  16. 16

    C ++では、ソースファイルで定義されている間にヘッダーファイルでデータ構造を宣言するにはどうすればよいですか?

  17. 17

    c ++-ヘッダーファイルで使用するときに構造体が認識されない

  18. 18

    ヘッダーファイルの問題:複数定義エラー。ここで最初に定義された

  19. 19

    ヘッダーファイル内で定義された複数の構造-それらを別々のhファイルとcppファイルに移動する必要があります

  20. 20

    Cエラー:関数と構造体がインクルードされたヘッダーファイルのメンバーであるにもかかわらず、関数とストレージサイズの暗黙の宣言が不明です

  21. 21

    C ++でヘッダーファイルなしで構造体と関数をリンクする

  22. 22

    .ccファイルによってアクセスおよび入力されるヘッダーファイル内の構造体を宣言します

  23. 23

    別のヘッダーファイル内で構造体を宣言すると、LNK2001エラーが発生するのはなぜですか?

  24. 24

    ヘッダーファイルを使用した複数定義エラー

  25. 25

    匿名構造体フィールドを持つ構造体が、その型のエイリアスで定義されたメソッドを満たさないのはなぜですか?

  26. 26

    ヘッダーファイルの変更された定義をCで表示する

  27. 27

    Cのヘッダーファイル内の構造体を認識する

  28. 28

    ObjectiveC-ヘッダーファイルでtypedef構造体を使用する

  29. 29

    ヘッダーファイルで宣言された構造体変数を複数のソースファイルにインクルードするにはどうすればよいですか?

ホットタグ

アーカイブ