【发布时间】:2022-01-17 20:06:39
【问题描述】:
假设我有两个相互引用的数据结构。我想将它们放入单独的头文件中,如下所示:
// datastruct1.h
#ifndef DATA_STRUCT_ONE
#define DATA_STRUCT_ONE
#include <datastruct2.h>
typedef struct DataStructOne_t
{
DataStructTwo* two;
} DataStructOne;
#endif
和
// datastruct2.h
#ifndef DATA_STRUCT_TWO
#define DATA_STRUCT_TWO
#include <datastruct1.h>
typedef struct DataStructTwo_t
{
DataStructOne* one;
} DataStructTwo;
#endif
我有一个main 函数:
#include <datastruct1.h>
#include <datastruct2.h>
int main()
{
DataStructOne* one;
DataStructTwo* two;
}
但是我的编译器抱怨:
$ gcc -I. -c main.c
In file included from ./datastruct1.h:4,
from main.c:1:
./datastruct2.h:8:2: error: unknown type name ‘DataStructOne’
8 | DataStructOne* one;
| ^~~~~~~~~~~~~
这是为什么呢?我该怎么做才能解决这个问题?
【问题讨论】:
-
在我的一生中,我找不到一个很好的问答对,从零开始解释这个常见问题,所以我自己写了。如果已经有一个,请随意关闭作为骗子。
-
不是骗子,但有点相关stackoverflow.com/questions/4757565/…
-
@463035818_is_not_a_number 有许多相关的问题和答案可以部分解释问题。我一直在寻找整个墨西哥卷饼,