2013-03-03 10 views
6

"ID_KEY"という名前の定数が3つの別々の.mファイルの先頭に宣言されていますが、他のファイルは含まれていません。次のように異なるスコープ内の同じ名前付き定数のリンカエラー

宣言がある:

#import "PublicGamesResponse.h" 

NSString *const ID_KEY = @"id"; 
... 
@implementation PublicGamesResponse 

、同様に他の二つのクラスの。しかし、同じ名前の複数の定義について不平を言っているリンカエラーが出ています(2つの定義をコメントアウトすると、これは消え去ります)。

私の質問はなぜ地球上でこれについて不平を言っているのですか? ID_KEYの各定義は他のすべての定義の範囲外であるため、なぜリンカーが不平を言っているのかわかりません。

免責事項として、私はプロジェクトをきれいにしてxCodeを再起動し、サイト上で同様の質問を探しましたが、運はありませんでした。

答えて

12

関数の外に変数または定数を定義すると、それらはグローバルスコープに配置されます。 Linkerはグローバル参照を解決し、同じ名前が複数回見つかると文句を言います。それらの定義の前でstaticを追加定数に彼らのコンパイル単位(それらが定義されているつまりファイル)の適用範囲を与えること

static NSString *const ID_KEY = @"id"; 

同じファイル内のすべての関数とメソッドがあります。この方法ID_KEYにアクセスできますが、名前はファイルのスコープ内にとどまります。基本的に、staticは、リンカーからその名前を「隠す」。

関連する問題