2013-03-03 28 views
6

3 ayrı .m dosyasının üstünde, her ikisi de diğer dosyaları içeren bir "ID_KEY" adında bir sabit var. aşağıdaki gibiFarklı kapsamlardaki aynı adlandırılmış sabitler üzerindeki Linker hatası

beyanıdır:

#import "PublicGamesResponse.h" 

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

Ve benzer diğer iki sınıfları için. Ancak ben aynı isimde birden fazla tanım hakkında şikâyet eden bir linker hatası alıyorum (Tanımlardan ikisini açıklamak gerekirse, bu gider).

Benim sorum şu ki, bu konuda şikayette bulunan linker yeryüzünde neden? ID_KEY'in her tanımı diğerlerinin kapsamı dışındadır, bu yüzden linker'ın neden şikayet ettiğini göremiyorum.

Yasal uyarı olarak, projeyi temizledim ve xCode'u yeniden başlattım ve sitede benzer soruları aradım, ancak şansım yoktu.

cevap

12

Bir işlev dışındaki değişkenleri veya sabitleri tanımladığınızda, bunlar global kapsamına yerleştirilir. Linker, global referansları çözer ve aynı adı bir defadan fazla bulduğunda şikayetçi olur.

static NSString *const ID_KEY = @"id"; 

Bu şekilde aynı dosyanın içindeki tüm fonksiyonlar ve yöntemler sahip olacaktır:

sabitler (tanımlandıkları yani dosyası) onların derleme biriminin bir kapsam tanımlarına önünde static eklemek vermek ID_KEY erişim, ancak dosya adı kapsamında kalır. Esasen, static, "linker" adını "gizler".

İlgili konular