लघु संस्करण: मेरे पास एक क्यूटी/सी ++ है जिसमें मुझे कोको/ऑब्जेक्टिव-सी कोड की सीमित मात्रा जोड़नी है। मैंने .cpp फ़ाइल को .mm फ़ाइल में बदल दिया है और ऑब्जेक्ट-सी कोड/ऑब्जेक्ट्स को फ़ाइल में जोड़ा है, और यह संकलित करता है और काम करता है। अब मुझे बनाए गए ऑब्जेक्ट्स में से एक के लिए एक प्रतिनिधि की आवश्यकता है- एक एनएसपीओपअप बटन (या इसके बजाए, इसके मेनू) सटीक होने के लिए - और मैं अटक गया हूं। मैं इस ऑब्जेक्ट के लिए एक प्रतिनिधि कैसे जोड़ सकता हूं?सी ++ से उद्देश्य-सी प्रतिनिधिमंडल को कैसे संभालें?
विवरण: प्रश्न में फ़ाइलें:
reportwindow.h, reportwindow.cpp -These reportwindow.mm का नाम बदलकर अपने मूल सी ++ कार्यान्वयन युक्त फ़ाइलों प्लस कुछ उद्देश्य-सी कोड (खोलने एक NSSavePanel एक युक्त हैं NSPopUpButton)। reportwindow.h अतिरिक्त रूप से एक .cpp फ़ाइल में शामिल है, अगर इससे कोई फर्क पड़ता है।
menuHandler.h, menuHandler.mm -These फ़ाइलें एक (वर्तमान में खाली) उद्देश्य-सी वर्ग है कि मैं एक प्रतिनिधि
मेरी पहली सोचा था कि मैं बस सी बना सकता है के रूप में उपयोग करने के लिए इच्छुक था शामिल ++ वर्ग प्रतिनिधि, लेकिन यह स्पष्ट रूप से काम नहीं करता है क्योंकि सी ++ प्रतिनिधिमंडल को समझ में नहीं आता है। मैंने सोचा कि मैं एक अलग उद्देश्य-सी वर्ग को एनएसएमएनयू डीलेगेट के रूप में बनाउंगा और इसके सी ++ वर्ग में सदस्य ऑब्जेक्ट के रूप में इसका एक उदाहरण जोड़ूंगा। चूंकि मैं सदस्यों के रूप में अन्य उद्देश्य-सी वस्तुओं को जोड़ने में सक्षम हूं, मुझे लगा कि यह काम करना चाहिए। हालांकि, जैसे ही मैंने सी ++ क्लास हेडर फ़ाइल में अपने नए उद्देश्य-सी वर्ग के लिए हेडर शामिल किया, मुझे एप्पल हेडर फ़ाइलों (NSValue.h से) "अपेक्षित अयोग्यता-आईडी से पहले '@' टोकन" के बारे में कई सौ त्रुटियां मिलीं। , NSObject.h, आदि) तो जाहिर है कि काम नहीं किया, कम से कम नहीं है। मुझे एक ही परिणाम मिलता है जब मेरी कक्षा शीर्षलेख फ़ाइल में कोई भी कोको हेडर शामिल होता है।
मैंने सोचा कि मैं उद्देश्य-सी वर्ग की अग्रेषित घोषणा की कोशिश करूंगा (इस तरह मैं अन्य उद्देश्य-सी वस्तुओं को काम कर रहा हूं)। हालांकि, यह या तो काम नहीं करता- अगर मैं इसे "क्लास myClassName" के रूप में घोषित करता हूं तो मुझे वर्ग को एक अलग प्रकार के प्रतीक के रूप में परिभाषित करने में त्रुटि मिलती है (संभवतः सी ++ कक्षा बनाम उद्देश्य-सी प्रोटोकॉल)। अगर मैं इसे @protocol myClassName के रूप में घोषित करने का प्रयास करता हूं, तो मुझे "अपेक्षित अयोग्यता-आईडी पहले '@' टोकन" के बारे में एक त्रुटि मिलती है। तो मैं यह काम कैसे कर सकता हूं?
में आप मिमी के लिए है कि विशिष्ट cpp फ़ाइल का नाम बदला है पर कुछ उपयोगी जानकारी नहीं है? –
प्रश्न में हेडर से जुड़ा एक, हां। – ibrewster
दूसरी तरफ जाने का रास्ता है, और शायद एकमात्र। पहली असफल कोशिश के बाद आपको आत्मसमर्पण नहीं करना चाहिए। अधिक जानकारी प्रदान करें, इसमें क्या शामिल है, वहां और अधिक .cpp फ़ाइलें हो सकती हैं जिनमें 'reportwindow.h' शामिल है। – hamstergene