C 两个头文件中的类型定义交换

C 两个头文件中的类型定义交换,c,C,我有两个头文件,它们应该使用彼此的typedef。情况如下: 例如: 在头文件中server.h typedef struct { int myint; }ServerSelfData; typedef struct { ServerSelfData servData; ClientSelfData clData; }SERVER_Data; 在名为client.h的第二个头文件中,我们有: typedef struct { int myint; }ClientSel

我有两个头文件,它们应该使用彼此的typedef。情况如下:

例如:

在头文件中server.h

typedef struct
{
   int myint;
}ServerSelfData;

typedef struct
{
   ServerSelfData servData;
   ClientSelfData clData;
}SERVER_Data;
在名为client.h的第二个头文件中,我们有:

typedef struct
{
   int myint;
}ClientSelfData;

typedef struct
{
   ClientSelfData clData;
   ServerSelfData servData;
}CLIENT_Data;
因此,在编译过程中,其中一个定义会出错。其中一个取决于首先包含哪个文件


这个问题有解决方法吗?

在这些头文件之前,您可以声明结构。稍后使用名称完成结构

typedef struct ServerSelfData ServerSelfData;
typedef struct CLIENT_Data CLIENT_Data;

typedef struct ServerSelfData
{
   int myint;
}ServerSelfData;

ServerSelfData
ClientSelfData
的定义可以移动到单独的头文件(或一个单独的头文件)中现在我得到了错误:
error:field'servData'的类型不完整
我建议它现在知道该类型,但不知道该类型的分隔空间。@Hairi您应该完成类型声明(给出其所有成员)在第一次使用它们之前(在您的案例中是结构成员),或者限制您自己使用指向这些类型的指针。我相信情况就是这样。好的,这回答了我的问题。谢谢你。@Hairi我很高兴它帮助了你:)我开始认为有3个标题。第三个是包含
client.h
server.h
的,其中定义了
server\u数据
client\u数据
,这将解决问题。好的,但是如果这两个结构类型定义相互包含呢?那么我们就不能把它们分成三个文件。上面的例子是解释这种情况的甲烷代码。这是我的问题的主要表现。