1. ホーム
  2. c

[解決済み】C 未知の型名「my_structure」。

2022-01-31 12:31:18

質問

このようなコードがあります。

main.h

#ifndef MAINH
#define MAINH
...
#include "my_struct.h"
void some_func(my_structure *x);
...
#endif

そして

my_struct.h

#ifndef UTILSH
#define UTILSH
...
#include "main.h"
...
typedef struct abcd {
    int a;
} my_structure;
...
#endif

が、コンパイルしようとするとこうなってしまいます。 error: unknown type name ‘my_structure’

何か思い当たることはありますか?

解決方法は?

インクルードをどのように並べたかによって、コンパイラーは void some_func(my_structure *x); を見る前に typedef struct abcd { int a; } my_structure; .

これを歩いてみましょう。

仮定の話 my_struct.h が最初に処理されると、次のような流れになります。

  1. UTILSH が定義されている
  2. MAINH が定義されている
  3. なぜなら UTILSH はすでに定義されているため、処理しない。 my_struct.h は処理されない。
  4. void some_func(my_structure *x); が処理されます。
  5. 現在 typedef が処理されます。

つまり、前処理の後、コンパイラは次のような一連の宣言を目にすることになる。

...
void some_func(my_structure *x);
...
typedef struct abcd {...} my_structure;

Bad jujuです。 の前方宣言が必要です。 my_structuremain.h あるいは、その循環的な依存関係を断ち切る必要があります (これは非常に望ましい選択肢です)。 の中に何かありますか? main.h その my_structure.h を実際に使用していますか? もしそうなら、それを別のファイルに因数分解して main.hmy_structure.h が含まれます。