2014-09-29 31 views
0

我有一個基於單個C文件的項目,我嘗試重新排列幾個.c和.h文件中的進一步開發。爲什麼我的C項目編譯找不到我的結構?

我的主要內容安排如下:

// General includes 

typedef struct 
{ 
} MyStruct; 

#include "MyInclude.h" 

// Rest of the code 

我的文件「MyInclude.c」的組織結構如下:

#include "MyInclude.h" 

// Defines 

// Functions that need to know MyStruct 

也有一些是我不understant有關的編譯過程GCC。事實上,我得到了錯誤「MyStruct未聲明(首次在此函數中使用)」,我不這樣做,因爲我在我的結構的typedef聲明後放置了我的include。

有人知道它爲什麼會發生?

+3

該結構不應該在頭文件中? – 2014-09-29 13:20:54

+0

什麼是MyInclude? MyStruct真的是空的嗎? – crashmstr 2014-09-29 13:21:27

+2

讓我改述我以前的評論:*爲什麼*不是頭文件中定義的結構?如果你有多個依賴於結構的源文件,他們將不知道它,只有它定義的源文件將知道結構。 – 2014-09-29 13:25:52

回答

6

這個問題有點不清楚。

文件「MyInclude.c」只能訪問您的H文件。 雖然你的結構被寫入另一個C文件。

你可以解決它:

  1. 定義的.h文件 「MyInclude.h」 的結構。它會工作,但在方法上它是錯誤的。
  2. 定義getter和setter方法來訪問你的結構

乾杯

+1

將'typedef'放在頭文件中沒有什麼「方法上的錯誤」,這就是通常的做法。而且,getter和setter對於這個問題是無關的,因爲它似乎是關於類型聲明的麻煩,而不是關於變量聲明。 – user694733 2014-09-29 14:01:49

0

你file.h:

// file.h 
#include <stdio.h> //Juste for printf 

typedef struct s_data 
{ 
char c; 
} t_data; 

你file.c:

#include "file.h" 

int main() 
{ 
t_data data; 

data.c = 'a'; 
printf("%c", data.c); 
return (0); 
} 

Compil(如果您的文件.c和.h在同一個目錄中):

gcc file.c -o my_app -I . 
相關問題