2012-04-18 20 views
0

私は非常に多くの構造を宣言している1つのa.hファイルを持っています。私はこれらの構造体をa.cファイル(私はa.hファイルを含んでいます)で初期化しています。同じa.hファイルを別のb.cファイルに再利用したいのです。 b.cにヘッダファイルa.hをインクルードしたときに、複数の定義としてエラーが発生しました。この問題を回避し、両方の.cファイルで同じ.hファイルを再利用するために何ができるか教えてください。あなたはただ、すなわち何かを定義することはありません、ヘッダファイルで物事をインスタンス化してはいけません.oファイルの多重定義エラー

#ifndef _MY_H_ 
#define _MY_H_ 

/* codez go here */ 

#endif _MY_H_ 

答えて

0

http://en.wikipedia.org/wiki/Include_guard

それらを宣言する。

あなたは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); 
4

の同等で.hファイルをラップする、すなわち、二回、それを含めないようにする必要があります

3

a.hが唯一の構造—ない変数を宣言する必要があります。また、変数を宣言した場合は、重複した定義を防ぐために、externと宣言する必要があります。 (その後、.cファイルの1つに一度定義してください。)

このエラーは、同じ変数の複数の定義が原因です。 a.cb.cが両方とも同じ変数名を宣言していないことを確認してください。

0

あなたのヘッダファイルは次のように宣言する必要があります。..

#ifndef MYHEADER_H 
#define MYHEADER_H 

struct MyStruct { 

    ... 
    ... 

}; 

#endif // MYHEADER_H 

ですから、.cファイルの任意の数で、このファイルを含める場合でも、その中の構造は一度だけ定義されます。

関連する問題