2013-03-03 4 views
6

मेरे पास एक स्थिर नाम "ID_KEY" है जिसे 3 अलग .m फ़ाइलों के शीर्ष पर घोषित किया गया है, जिनमें से कोई भी अन्य फ़ाइलें शामिल नहीं है।अलग-अलग क्षेत्रों में समान नामित स्थिरांक पर लिंकर त्रुटि

घोषणा इस प्रकार है:

#import "PublicGamesResponse.h" 

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

और इसी तरह दो अन्य वर्गों के लिए। हालांकि मुझे एक ही नाम की कई परिभाषाओं के बारे में शिकायत करने में एक लिंकर त्रुटि मिल रही है (यदि मैं दो परिभाषाओं पर टिप्पणी करना चाहता हूं, तो यह दूर हो जाता है)।

मेरा सवाल यह है कि पृथ्वी पर इस बारे में शिकायत करने वाला लिंकर क्यों है? ID_KEY की प्रत्येक परिभाषा अन्य सभी के दायरे से बाहर है, इसलिए मुझे नहीं पता कि लिंकर शिकायत क्यों कर रहा है।

अस्वीकरण के रूप में, मैंने प्रोजेक्ट को साफ़ किया और एक्सकोड को पुनरारंभ किया, और साइट पर समान प्रश्नों की तलाश की, लेकिन कोई भाग्य नहीं था।

उत्तर

12

जब आप किसी फ़ंक्शन के बाहर चर या स्थिरांक परिभाषित करते हैं, तो उन्हें वैश्विक स्कोप में रखा जाता है। लिंकर वैश्विक संदर्भों को हल करता है, और यह शिकायत करता है जब यह एक ही नाम से अधिक बार मिलता है।

स्थिरांक उनके संकलन इकाई की एक गुंजाइश (यानी फ़ाइल जहां वे परिभाषित कर रहे हैं) उनकी परिभाषा के सामने static जोड़ने देने के लिए:

static NSString *const ID_KEY = @"id"; 

इस तरह सभी कार्य करता है और तरीकों में एक ही फाइल के अंदर करना होगा ID_KEY तक पहुंच, लेकिन नाम फ़ाइल के दायरे में रहेगा। अनिवार्य रूप से, static लिंकर से नाम छुपाता है।

संबंधित मुद्दे