2014-05-24 42 views
0

首先我想說我的英語說得很少,所以請原諒我的拼寫錯誤。失敗,包括C庫中的庫文件

我在使用代碼編譯一些庫在C問題:塊作爲IDE

我有以下代碼:

//main.c 

#include "lib1.h" 

int main(){ 

} 

與 「lib1.h」 是

#ifndef GUARD_LIB1 
#define GUARD_LIB1 

MyTypedef variable123; 

#endif 

「lib1.c」是

#include "lib2.h" 
#include "lib1.h" 

最後, 「lib2.h」 是

#ifndef GUARD_LIB2 
#define GUARD_LIB2 

typedef int MyTypedef; 

#endif 

但總是給我編譯錯誤,在 「lib1.h」 不承認MyTypedef,有什麼建議?

的錯誤是:

"Unknow type name: 'MyTypedef'" 

EIDT:

真正的代碼,我有問題。

// EnzoLib.c 
#include <winsock2.h> 
#include <windows.h> 
#include <stdio.h> 
#include "EnzoLib.h" 




// EnzoLib.h 

//blah blah blah... 

//Estructuras 
typedef struct { 
    SOCKET sock; 
    char nombre[64]; 
    char activo; 
    struct sockaddr_in from; 
} Socket; 

//blah blah blah... 

和main.c中

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <process.h> 
#include "EnzoLib.h" 

和錯誤:

C:\Users\Enzo\Documents\codeblocks\lp1\ServidorChat\EnzoLib.h|6|error: unknown type name 'SOCKET'| 

,我應該main.c中的#include 「EnzoLib.h」 之前添加#?我只能用我在EnzoLib.h

聲明功能

EDIT2:

是,我想一個整潔的方式進行編程。不要把「#includes」放在「.C文件」上?

+1

編譯器無法首先看到該類型的定義而無法聲明「MyTypedef」類型的變量。把'typedef'放在頭文件中。 –

+0

'typedef struct int MyTypedef;'?試圖定義一個名爲'struct int'的類型可能是一種勇敢但短暫的努力。 –

回答

1

編譯main.c時,從不包含包含MyTypedef定義的標頭lib2.h。因此,在編譯main.c時,編譯器有不知道這是什麼類型。

也就是說,預處理程序運行後,編譯器看到兩個「翻譯單位」(標準通話交流文件,所有的頭它統稱包括翻譯單元):

main.c變爲:

//main.c 

#ifndef GUARD_LIB1 
#define GUARD_LIB1 

MyTypedef variable123; 

#endif 

int main(){ 

} 

lib1.c變爲:

#ifndef GUARD_LIB2 
#define GUARD_LIB2 

typedef struct int MyTypedef; 

#endif 
#ifndef GUARD_LIB1 
#define GUARD_LIB1 

MyTypedef variable123; 

#endif 

lib1.c編譯器知道什麼MyTypedef是,但在main.c它沒有。

如果你想在一個頭中使用一個類型,那麼這個頭應該包含它的依賴關係。有lib1.h包括lib2.h,以便任何人使用lib1.h可以告訴什麼MyTypedef是。

0

從EnzoLib.c移動包括文件EnzoLib.h只保留中的#include 「EnzoLib.h」

的EnzoLib.h的內容應該是這樣的

#ifndef ENZOLIB_H 
#define ENZOLIB_H 

#include <winsock2.h> 
#include <windows.h> 
#include <stdio.h> 

typedef struct { 
    SOCKET sock; 
    char nombre[64]; 
    char activo; 
    struct sockaddr_in from; 
} Socket; 

#endif 
//end of EnzoLib.h 

EnzoLib.c的內容應該在線

#include "EnzoLib.h" 

//Freely use the Socket structure 
Socket mySocket; 

//end of EnzoLib.c