2016-03-15 64 views
2

我有两个应该使用对方的typedefs的头文件。这里的情况是:在两个头文件中进行类型定义交换

例如:

在头文件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; 

所以在编译过程中会出现其中一个定义错误。其中之一取决于首先包含哪个文件。

这个问题有什么解决方法吗?

+0

我会开始认为有3个标题。第三个是包含'client.h'和'server.h'并且定义了'SERVER_Data'和'CLIENT_Data'的。 – LPs

+0

这将解决问题。好的,但是如果两个结构类型定义包含对方呢?然后我们不能将它们分成三个文件。上面的例子是解释情况的代码。这是我的问题的主要代表。 – Hairi

回答

2

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

typedef struct ServerSelfData ServerSelfData; 
typedef struct CLIENT_Data CLIENT_Data; 

typedef struct ServerSelfData 
{ 
    int myint; 
}ServerSelfData; 
+0

现在我收到错误:'error:field'servData'has incomplete type' – Hairi

+0

我建议它现在知道类型,但不知道要为该类型分离多少空间。 – Hairi

+0

@Hairi您应该在第一次使用(您的案例中的结构成员)之前完成类型声明(给予其所有成员)或限制自己使用指向这些类型的指针。 –

0

ServerSelfData的定义和ClientSelfData可能我感动分离这将被包含在这两个server.hclient.h头文件(或一个单独的头文件)。