2012-06-08 19 views
13

वर्ग के शीर्षक में, इंटरफ़ेस घोषणा के बाहर, मैं वैश्विक स्थिरांक घोषित किया है:डुप्लिकेट प्रतीक त्रुटि वैश्विक निरंतर

NSString * const gotFilePathNotification = @"gotFilePath"; 
NSString * const gotResultNotification = @"gotResultOfType"; 

gotResultNotification केवल इस वर्ग (अभी तक) में प्रयोग किया जाता है, लेकिन मैं gotFilePathNotificaion संदर्भ एक और वर्ग कार्यान्वयन में। ऐसा करने के लिए, मैं इस हेडर को आयात करता हूं।

जब मैं संकलित करने का प्रयास करता हूं, तो मुझे इस शीर्षलेख में मिलीफाइलपैथ नोटिफिकेशन के बारे में एक डुप्लिकेट प्रतीक लिंकर त्रुटि मिलती है। ऐसा क्यों होता है?

उत्तर

26

आपके पास फ़ाइल पहचान पर दो अलग-अलग संकलन इकाई (ओं) में एक ही नाम के साथ दो पहचानकर्ता हैं। यह का उल्लंघन करता है। इसके बजाय आपको -

  1. शीर्षलेख फ़ाइल में बाह्य लिंक करने के लिए चिह्नित वैश्विक चर घोषित करने की आवश्यकता है।

    extern NSString * const gotFilePathNotification; 
    
  2. अब केवल एक स्रोत फ़ाइल में परिभाषा प्रदान करते हैं।

    NSString * const gotFilePathNotification = @"gotFilePath"; 
    

अब जहां कभी आप इन चर का उपयोग करने की आवश्यकता है, स्रोत फ़ाइल की हेडर शामिल हैं।

5

आपको उन्हें हेडर फ़ाइल में बाहरी घोषित करने और उन्हें कार्यान्वयन फ़ाइल में परिभाषित करने की आवश्यकता है। स्पष्टीकरण के लिए यह सवाल देखें। Global Variables in Cocoa/Objective-C?

दूसरी प्रतिक्रिया स्पष्टीकरण प्रदान करती है कि मैं यहां दोहरा दूंगा। चर के लिए डिफ़ॉल्ट भंडारण योग्यता स्थिर है। इसका अर्थ यह है कि जब आप एक ही चर के साथ दो अलग-अलग फ़ाइलों को जोड़ने का प्रयास करते हैं, जैसे ही जब आप अपनी हेडर फ़ाइल आयात करते हैं, तो लिंकर यह मान लेगा कि चर गुणा-परिभाषित है।

+0

डिफ़ॉल्ट भंडारण योग्यता ** ** स्थिर नहीं है। यदि यह था, तो आपके पास एक लिंकर त्रुटि नहीं होगी। एक स्थैतिक चर में आंतरिक संबंध है। इसलिए, यदि दो अनुवाद इकाइयां एक समान पहचानकर्ता के साथ स्थिर चर परिभाषित करती हैं, तो उनमें से प्रत्येक के पास एक अलग चर होता है। –

4

यह भी सुनिश्चित करें कि आप एच फ़ाइल सहित हैं और एम फ़ाइल नहीं हैं। यह मुझे पागल कर रहा था।

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