[解決済み】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
が最初に処理されると、次のような流れになります。
-
UTILSH
が定義されている -
MAINH
が定義されている -
なぜなら
UTILSH
はすでに定義されているため、処理しない。my_struct.h
は処理されない。 -
void some_func(my_structure *x);
が処理されます。 -
現在
を
typedef
が処理されます。
つまり、前処理の後、コンパイラは次のような一連の宣言を目にすることになる。
...
void some_func(my_structure *x);
...
typedef struct abcd {...} my_structure;
Bad jujuです。 の前方宣言が必要です。
my_structure
で
main.h
あるいは、その循環的な依存関係を断ち切る必要があります (これは非常に望ましい選択肢です)。 の中に何かありますか?
main.h
その
my_structure.h
を実際に使用していますか? もしそうなら、それを別のファイルに因数分解して
main.h
と
my_structure.h
が含まれます。
関連
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】argv[]をint型として取得するには?
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。