2012-02-09 10 views
0

私はserver.ccファイルでグローバル宣言されているstatic unsigned long gVar;を持っています。
しかし、私はextern unsigned long gVar;を使用して他のファイルでそれを使用しようとすると、それはエラーを与える:未解決の外部シンボル「unsigned long型gVar」

unresolved external symbol "unsigned long gVar"。私は静的変数をexternする方法を教えてください。私はこのファイル以外のファイルから他の変数をexternすることができます。

答えて

4

あなたが一緒にstaticexternを使用することはできません。あなたが他のファイルで変数を使用したい場合は
だけstaticを削除し、ちょうどexternとしてそれを宣言する。

なぜstaticexternを一緒に使用できないのですか?

staticは内部リンケージを意味し、externは外部リンケージを意味します。

外部リンケージシンボルは、プロジェクトaccrossすべてのファイルに表示されている必要があり暗示しながら、内部リンケージは、シンボルは唯一、それが宣言された翻訳単位でアクセス可能であることを意味し、明らかに、彼らは相互に排他的です。

+0

静的は異なるコンテキストで異なる意味を持っていると言及する必要があります。 –

+1

@DanO:私の答えは、実際に尋ねられるQを説明するつもりです。つまり、なぜ静的な変数をexternとして宣言できないのですか? *私は重要ではあるが手元のQとは関係のない細部を追加することで難読化するつもりはない。 –

+0

しかし、彼は静的なローカルメンバーと静的メンバーの区別をしていません。これは、質問と回答の両方にあいまいさを残します。 –

1

さて、名前空間スコープでstatic T x;として定義されたオブジェクトは、それが定義されているファイルにのみ局所的に可視です。実際、これは正確にはstaticキーワード(名前空間レベル)を使用する機能です。 staticを削除するだけです。

関連する問題