2011-07-04 9 views
-2

可能性の重複:
What is the correct way of using extern for global variables ?この状況でグローバル変数を宣言するには?

同様の質問を繰り返して申し訳ありません。

//object.h 
object p; 



//b.h 
#include object.h 



//b.cc 
extern object p; 


//c.h 
#include object.h 
#include b.h 

//c.cc 
extern object p; 


//main.cc 
#include c.h 
extern object p; 
int main() {} 

基本的に私はcbmainすべてがpをオブジェクトへのアクセスを持っている必要があります。また、オブジェクトクラスのヘッダーにアクセスするために、bとbのメソッドにアクセスするにはcが必要です。グローバル変数pを宣言する方法は何ですか?上記のコードは私に多重定義エラーを与えます。長すぎるとコード全体を投稿することはできませんが、上記は状況をよく説明していると思います。

+0

申し訳ありませんが、その投稿は完全に私の質問に答えていません。 – Mark

+0

Xeoの投稿はここであなたの質問に正確に答えます。ファイル名のみです(例:a.hではなくobject.h)。 – interjay

+0

彼の答えでは、私はobject.ccをa.ccに持っていません。 – Mark

答えて

1

のグローバル変数を.ccファイルのうちの1つだけと宣言してください。 extern宣言を対応する.hファイルに置き、グローバル変数にアクセスする必要があるすべての.ccにそのファイルを含めます。

このように、変数は、はすべて.cc.hからextern宣言#include Dのおかげで)宣言されるであろうが、単一.ccを定義します。一方

、あなたが そうでなければ、(それらがstaticとして宣言された。すなわち、彼らは、内部リンケージを持っていた場合を除き、リンク時に複数の定義のエラーが発生します、ヘッダーでグローバル変数を定義することはありませんはずですが、あなたはしません、これまでヘッダーに変数 staticが定義されている必要があります)。

ところで、コンパイル段階での複数の定義エラーを避けるために、ヘッダーにインクルードガードを使用することを忘れないでください。

+0

これは私の質問に答えます。ありがとう – Mark