2011-11-15 18 views
5

मुझे इस चेतावनी का जवाब कैसे देना चाहिए?चेतावनी: '...' की डुप्लिकेट प्रोटोकॉल परिभाषा को अनदेखा किया गया है

चेतावनी: के प्रोटोकॉल परिभाषा नकल '...' नजरअंदाज कर दिया है

मेरे प्रोटोकॉल घोषणा का अपना ज फ़ाइल में है, और यह # में कुछ अन्य फाइलों में import'ed है मेरी परियोजना।

ठीक है, बस मामले में, यहाँ प्रोटोकॉल घोषणा के साथ पूरे हेडर फाइल है:

#import <Foundation/Foundation.h> 

@class Wrapper; 

@protocol WrapperDelegate 

@required 
- (void)wrapper:(Wrapper *)wrapper didRetrieveData:(NSData *)data; 

@optional 
- (void)wrapperHasBadCredentials:(Wrapper *)wrapper; 
- (void)wrapper:(Wrapper *)wrapper didCreateResourceAtURL:(NSString *)url; 
- (void)wrapper:(Wrapper *)wrapper didFailWithError:(NSError *)error; 
- (void)wrapper:(Wrapper *)wrapper didReceiveStatusCode:(int)statusCode; 

@end 

किसी भी सलाह के लिए धन्यवाद।

+7

1. क्या आप सुनिश्चित हैं कि आप इसे # आयात कर रहे हैं और इसे # # दुर्घटना से शामिल नहीं कर रहे हैं? 2. क्या आप निश्चित हैं (पूछने लायक) कि आपकी परियोजना में कुछ भी वही नाम (WrapperDelegate) का उपयोग नहीं करता है? –

+0

क्विक्सोटो की टिप्पणी संदिग्ध रूप से एक उत्तर की तरह दिखती है :) मेरे पास एक ही समस्या है जहां मैंने गलती से # शामिल किया था। #import डुप्लिकेशंस से बचने के लिए पर्याप्त स्मार्ट है। –

उत्तर

5

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

+4

क्या होता है यदि मेरे पास दो वर्ग हैं जो समान प्रोटोकॉल को लागू करते हैं? दोनों को इसकी ज़रूरत है, तो मैं इसके आसपास कैसे हो सकता हूं? – zach

+2

@zach (या एक ही समस्या के साथ कोई और) - मैं इस मुद्दे में भाग गया और एक प्रश्न पोस्ट किया, जिसका उत्तर अब दिया गया है [यहां] (http://stackoverflow.com/questions/10001293/duplicate-protocol-definition- चेतावनी-लेकिन-ए-जरूरत-गुणकों के- इस प्रोटोकॉल/10001416 # 10001416)। – Squatch

3

हाँ मुझे एक ही समस्या थी। मैं एक्सकोड प्रोजेक्ट में डुप्लिकेट हेडर फ़ाइल नहीं ढूंढ पाया। लेकिन जब मैं एक्सकोड से खोजक के माध्यम से गया तो मुझे परियोजना में प्रोटोकॉल की 2 हेडर फ़ाइल मिली। किसी को समस्या को हल करने से हटाना। धन्यवाद।

1

यहां मौजूद किसी विशेष समस्या के साथ मौजूदा उत्तरों को पूरक करने के लिए।

असल में, कंपाइलर झूठ नहीं बोल रहा है। यह एक वर्ग, प्रोटोकॉल, enum, परिभाषित, या अपमानजनक शीर्षलेख फ़ाइलों में जो कुछ भी मौजूद है की एक से अधिक परिभाषाओं को ढूंढ रहा है।

गलती आपके हेडर फ़ाइलों और हेडर खोज पथ का संयोजन हो सकती है।

सबसे पहले, समस्याएं परेशान लगती हैं क्योंकि हम जानते हैं कि #import कथन केवल उन फ़ाइलों को आयात करेगा जो पहले ही लागू नहीं किए जा चुके हैं। इसलिए, #include के विपरीत, यह समस्या नहीं होनी चाहिए, है ना?

#import काम करता है। हालांकि, अगर आपके शीर्षलेख गलत तरीके से स्थापित किए गए हैं, हालांकि यह एक ही नाम वाली फ़ाइल का सामना कर सकता है, उदा। MyLibrary.h, यदि वह फ़ाइल दो अलग-अलग स्थानों में मौजूद है दोनों हेडर खोज पथ में हैं तो एक्सकोड उन्हें दो अलग-अलग फ़ाइलों के रूप में समझ पाएगा।

मेरे मामले में, मेरे पास एक स्थिर पुस्तकालय निर्माण चरण था जिसने सार्वजनिक शीर्षकों की प्रतिलिपि बनाई थी।

enter image description here

निर्भर उत्पादों ऊपर फ़ोल्डर की खोज - और अपने प्रोजेक्ट के स्रोत फ़ोल्डर - के रूप में include/$(TARGET_NAME) सेटिंग बिल्ड में परिभाषित किया।

इसका मतलब है कि दो अलग-अलग फ़ोल्डरों - हेडर खोज पथ दोनों में - जिसमें फ़ाइल MyLibrary.h थी। उस फ़ाइल में सबकुछ एक डुप्लिकेट या पुनर्वितरण संकलक चेतावनी या लिंकर त्रुटि का कारण बनता है।

टीएलडीआर: एक ही फ़ाइल दो अलग-अलग फ़ोल्डरों में हो सकती है और दोनों आपके हेडर खोज पथ में हैं। अपने पथों की जांच करें, और यदि आपने प्रोजेक्ट या वर्कस्पेस में एक स्थिर लाइब्रेरी को शामिल किया है, तो जांच करें कि आपकी जांच के हिस्से के रूप में सार्वजनिक शीर्षलेखों की प्रतिलिपि बनाई गई है।

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

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