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

タピポ

ヘッダーファイルに付属している2つの構造体があります。

私の構造体番号1は:

ヘッダーファイル 'list.h':

typedef struct list * List;

ソースファイル 'list.c':

struct list {
    unsigned length;
    char * value;
};

私の構造体番号2は:

ヘッダーファイル 'bal.h':

typedef enum {START, END, MIDDLE, COMMENTS, CONDITIONS} TypeListBal;
typedef struct bal * Bal;

ソースファイル 'bal.c':

i've include those header files : 
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include "list.h"

struct bal {
    TypeListBal type;
    List name;              // Name of the bal
    List attributes[];          // Array of type struct List
};

bal.cファイルで次のような関数を使用しようとしているとき:

Bal createBal(List name){

char * search;
const char toFind = '=';
    search = strchr(name->value, toFind);

}

この行でエラーが発生しています:search = strchr(name->value, toFind);saying:error:不完全な型へのポインターの逆参照

bal.cにlist.hをすでに含めている理由がわかりません

Stackoverflowをよく読んで、プログラミングのタイプは「不透明(OPAQUE)」と呼ばれています。これは本当に素晴らしいようですが、他のヘッダーファイルを他のソースファイルに使用する方法がわかりません。bal.cファイルにlist.hを含めるだけでいいと思いました。

私はこのcommmdを使ってgccでコンパイルしています: gcc -g -W -Wall -c bal.c bal.h

どうもありがとうございます !

ジェームズ・T・スミス

ヘッダーファイルをインクルードするときは、それだけです。ヘッダーファイルには、次の行のみが含まれています。

typedef struct list * List;

mainからこの構造体を使用しようとすると、コンパイラーは不完全な型について文句を言います。これは、ソースファイルの観点から、この構造体にはメンバーがないためです。実際、それはまったく定義されていません。

あなたが置く必要があります:

struct list;
typedef struct list * List;

ヘッダーファイル内。ただし、このプロセスでは不透明な構造体が作成されることに注意してください。つまり、例えば

List l1;
l1->data = 0; //error

コンパイラはヘッダーファイルからインクルードされたものだけを見るため、許可されていません。そのコンパイルユニットでは、構造に変数は存在しません。

これ意図的に使用して、ユーザーにデータ型のゲッター/セッターを通過させることできます。何かのようなもの

int data = ListStuff_Get_Item1(l1);

実行できますが、ListStuff_Get_Item1()関数を.hで宣言し、.cで定義する必要があります。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

Cヘッダーとソースファイルの構造

分類Dev

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

分類Dev

cファイルでグローバルに使用するためのヘッダーファイルでのextern構造体テンプレートの宣言

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

1つのCソースファイルで2つの構造体定義を適切に使用する方法

分類Dev

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

分類Dev

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

分類Dev

構造とtypedefを含むcヘッダーと.cファイル

分類Dev

c ++ヘッダーファイルの再定義エラー

分類Dev

cヘッダーファイルへの未定義の参照

分類Dev

アセンブリファイルのCヘッダーのデータ構造を使用する

分類Dev

別のcファイルで定義されている構造体にアクセスしますか?

分類Dev

ヘッダー/ライブラリファイルのデータベースとC ++の定義

分類Dev

本文またはヘッダー ファイルのデフォルトの C++ 定義

分類Dev

C ++-ヘッダーファイルの構造を外部から見えなくする

分類Dev

ユーザー定義のc ++ヘッダーファイルの.h拡張子を削除する

分類Dev

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

分類Dev

Cヘッダーファイルで外部定義された定数

分類Dev

C / C ++ファイルで関数を定義し、ヘッダーにrepectiveファイルを含める

分類Dev

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

分類Dev

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

分類Dev

エラー:Cヘッダーファイルの「静的変数」の再定義

分類Dev

C ++ 11でのバイナリファイルの構造の定義

分類Dev

ヘッダーファイルの構造体メンバーにマクロ#defineを使用すると、cコードをコンパイルできません

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

    Cヘッダーとソースファイルの構造

  5. 5

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

  6. 6

    cファイルでグローバルに使用するためのヘッダーファイルでのextern構造体テンプレートの宣言

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

    1つのCソースファイルで2つの構造体定義を適切に使用する方法

  11. 11

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

  12. 12

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

  13. 13

    構造とtypedefを含むcヘッダーと.cファイル

  14. 14

    c ++ヘッダーファイルの再定義エラー

  15. 15

    cヘッダーファイルへの未定義の参照

  16. 16

    アセンブリファイルのCヘッダーのデータ構造を使用する

  17. 17

    別のcファイルで定義されている構造体にアクセスしますか?

  18. 18

    ヘッダー/ライブラリファイルのデータベースとC ++の定義

  19. 19

    本文またはヘッダー ファイルのデフォルトの C++ 定義

  20. 20

    C ++-ヘッダーファイルの構造を外部から見えなくする

  21. 21

    ユーザー定義のc ++ヘッダーファイルの.h拡張子を削除する

  22. 22

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

  23. 23

    Cヘッダーファイルで外部定義された定数

  24. 24

    C / C ++ファイルで関数を定義し、ヘッダーにrepectiveファイルを含める

  25. 25

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

  26. 26

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

  27. 27

    エラー:Cヘッダーファイルの「静的変数」の再定義

  28. 28

    C ++ 11でのバイナリファイルの構造の定義

  29. 29

    ヘッダーファイルの構造体メンバーにマクロ#defineを使用すると、cコードをコンパイルできません

ホットタグ

アーカイブ