我無法解決下一個問題:
//foo.h
#ifndef FOO_H_
#define FOO_H_
#include "BAR.h"
#include "foos/foo_bazz.h"
typedef struct
{
...
} FOO;
// HERE I HAVE CALL `foo_baz(foo, bar);`
void
foo_bar(FOO *foo, BAR *bar);
#endif /* FOO_H_ */
//bar.h
#ifndef BAR_H_
#define BAR_H_
typedef struct
{
...
} BAR;
#endif /* BAR_H_ */
//foos/foo_bazz.h
#ifndef FOO_BAZZ_H_
#define FOO_BAZZ_H_
#include "FOO.h"
#include "BAR.h"
void
foo_baz(FOO *foo, BAR *bar);
#endif /* FOO_BAZZ_H_ */
所以它會產生這樣的錯誤:
foos/foo_bazz.h: error: unknown type name ‘FOO’; did you mean ‘FOO_H_’?
16 | FOO *foo,
| ^~~~
| FOO_H_
我試圖#include "FOO.h"從foos/foo_bazz.h 中洗掉并添加typedef struct FOO;ortypedef struct FOO FOO;但它沒有做一些改變......
我也試圖做反 - 我在FOO.h 中宣告了函式,但結果是一樣的。
請幫幫我,謝謝
uj5u.com熱心網友回復:
為什么要在 foo.h 中包含 foo_bazz?
它肯定會失敗。在 foo_bazz.h 中包含 foo.h 不會宣告型別,因為它已經受到保護。
這沒有道理。只需將 foo_bazz.h 包含.c在您將擁有函式和資料定義的檔案中。IMO XY 問題。
uj5u.com熱心網友回復:
問題在于宣告:
void foo_baz(FOO *foo, BAR *bar);
在FOO定義之前遇到。您可以通過重新排序 foo.h 中的代碼來解決該問題,因此:
#include "BAR.h"
typedef struct
{
...
} FOO;
#include "foos/foo_bazz.h"
void
foo_bar(FOO *foo, BAR *bar);
也就是說,@0___________ 的解決方案在大多數情況下更有意義,包括這個,但值得理解問題發生的原因/方式,而不是簡單地盲目修復它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367253.html
上一篇:如何在C中打開檔案?
