2016-03-15 84 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頭文件(或一個單獨的頭文件)。