2012-04-18 151 views
0

我有一個a.h文件,我已經聲明瞭很多結構。我在a.c文件中初始化這些結構(我已經包含了a.h文件),我想在另一個b.c文件中重用相同的a.h文件。當我在b.c中包含頭文件a.h時,我得到了多重定義的錯誤。請幫助我可以做些什麼來防止此問題並在兩個.c文件中重複使用相同的.h文件。.o文件中的多重定義錯誤

回答

4

相當於你千萬實例化的東西在頭文件中,即從來沒有定義什麼,只是宣佈他們。

,你應該把每一個宣佈的事情一個定義在C文件一個,並在共享的頭extern聲明:

mydata.h

struct Foo { 
    float baryness; 
    float baziness; 
}; 

extern struct Foo TheFoo; 

一個 C文件:

#include "mydata.h" 

struct Foo TheFoo; 

在其他頭項目:

#include "mydata.h" 

printf("the baziness is %f right now\n", TheFoo.baziness); 
3

a.h只能申報結構—不變量。或者,如果它聲明瞭變量,則應聲明它們爲extern以防止重複的定義。 (然後在.c文件中的一箇中定義它們)

錯誤是由同一變量的多個定義引起的。確保a.cb.c不能同時聲明相同的變量名稱。

0

你的頭文件應該是這樣,即使您在任意數量的.c文件這個文件中聲明,這樣的..

#ifndef MYHEADER_H 
#define MYHEADER_H 

struct MyStruct { 

    ... 
    ... 

}; 

#endif // MYHEADER_H 

,結構,它將只能定義一次。