2011-01-17 10 views
14

मेरी प्रोजेक्ट में कोर लाइब्रेरी सी/सी ++ फाइलों का हिस्सा हैं, जबकि यूआई को उद्देश्य सी, में विकसित करने की आवश्यकता है, मैं सक्षम हूं उपयोग करने के लिए/उद्देश्य सी/.mm फ़ाइलों से कॉल सी ++ कार्यों, लेकिन अभी तक कोई भाग्य रिवर्स, यानी मैं सी ++ फ़ाइलें, से उद्देश्य सी कार्यों कॉल करने के लिए जब मैं उद्देश्य सी हैडर भी प्रणाली हैडरमिक्सिंग उद्देश्य सी, (*। एम, * .एमएम और .c /.cpp) फ़ाइलें

शामिल करने की कोशिश की नहीं पा रहा हूँ
#import <foundation/foundation.h> 

के आसपास 1000 से अधिक संकलन त्रुटि हो रही है,

कुछ इस

की तरह
/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:180:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:180: error: expected unqualified-id before '@' token 


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:182:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:182: error: expected initializer before '*' token 


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183: error: 'NSString' was not declared in this scope 


/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183:0 /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:183: error: 'aSelectorName' was not declared in this scope 

मैं कुछ पूर्व संकलन ध्वज लापता, आदि .. किसी को भी मुझे, सबसे अच्छा संभव तरीके से कॉल करने के लिए/पहुँच उद्देश्य सी क्लास जो NSObject से विरासत में मिली है सुझाव दे सकते हैं कर रहा हूँ बहुत सी ++ कोड को संशोधित करने के बिना, मैं सिर्फ करने की जरूरत है एक समारोह फोन

कोड संरचना/आदेश शामिल हेडर फाइल

Some system header file 
Some Core Class Header file 

#import <foundation/foundation.h> 
+2

<नींव/नींव.h><फाउंडेशन/फाउंडेशन.h> –

+0

@Bavarious होना चाहिए: हालांकि यह संभवतः काम करेगा क्योंकि एचएफएस + डिफ़ॉल्ट रूप से असंवेदनशील है। – JeremyP

+1

@ जेरेमीपी यूप, इसलिए _must_ के बजाय _should_। =) केस संवेदी फाइल सिस्टम में संकलित होने पर उसका कोड टूट जाएगा। –

उत्तर

44

हैं आप ऑब्जेक्टिव-सी के साथ-साथ उपयोग करने के लिए की जरूरत है कि सी ++ कोड के साथ एक .cpp फ़ाइल है, तो या तो है कि .cpp फ़ाइल नाम बदलने के लिए कंपाइलर के लिए .mm या -x objective-c++ पास करें।

+1

हम इस पैरामीटर को कंपाइलर में कैसे पास कर सकते हैं? क्या हम इसे परियोजना सेटिंग्स में पा सकते हैं? – AmineG

+0

@some आप किस एक्सकोड संस्करण का उपयोग कर रहे हैं? –

+0

मैं मुख्य रूप से एक्सकोड 3.2.5 – AmineG

4

मुझे सी ++ हेडर फ़ाइलों में किसी भी उद्देश्य-सी का उपयोग करने के लिए यह असंभव लगता है।

हालांकि, आप कार्यान्वयन फ़ाइलों में उद्देश्य-सी शामिल कर सकते हैं।

(.mm या आप फ़ाइल के जानकारी में फ़ाइलों को सीपीपी व्याख्या करने के लिए कैसे निर्धारित कर सकते हैं चुनें Info-> सामान्य:। फ़ाइल-प्रकार: Sourcecode.cpp.objcpp)

उपयोग

cppClass.h :

class objcClass; 

objcClass* mMemberVariable; 

cppClass.mm:

#import "objcClass.h"; 

void cppFunction(){ 
    [objcClass message]; 
} 
सीपीपी हेडर फाइल में

फिर उस शीर्षलेख को शामिल करें जो वर्ग को .cpp या .mm फ़ाइल में परिभाषित करता है।

+0

शानदार काम कर रहा है, – Amitg2k12

+0

आप एक सी ++ हेडर फ़ाइल में उद्देश्य-सी का उपयोग कर सकते हैं, मैं एक परियोजना पर काम कर रहा हूं जो ऐसा करता है। कार्यान्वयन को यूटिलिटीज में ऑब्जेक्टिव-सी ++ के रूप में सेट किया गया है-> फाइल इंस्पेक्टर और हेड के भीतर ओबीजे-सी कोड #if परिभाषित (__OBJC__) –

+0

में लपेटा गया है, मैंने पाया है कि आप बिना हेडर फ़ाइल में कोई उद्देश्य-सी कक्षाएं घोषित नहीं कर सकते फ़ाइल सहित यह एक .mm फ़ाइल है। मेरे मामले में, क्योंकि मेरे कोड को क्रॉस-प्लेटफॉर्म होने की आवश्यकता है, मैंने हेडर में किसी भी उद्देश्य-सी कक्षाओं को '' 'शून्य *' '' के रूप में घोषित किया है और फिर उन्हें .mm कार्यान्वयन फ़ाइल में डाला है। – Adamski

1

यदि आप क्यूटी का उपयोग करते हैं, तो Q_FORWARD_DECLARE_OBJC_CLASS मैक्रो है जिसका उपयोग उद्देश्य-सी वर्ग घोषित करने के लिए किया जा सकता है।

#ifndef Q_FORWARD_DECLARE_OBJC_CLASS 
# ifdef __OBJC__ 
# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) @class classname 
# else 
# define Q_FORWARD_DECLARE_OBJC_CLASS(classname) typedef struct objc_object classname 
# endif 
#endif 
0

मैं एक प्रोग्रामिंग भाषा के आधार पर फ़ाइलों का विस्तार नाम की एक तकनीक का इस्तेमाल किया:

एक संदर्भ के रूप में, यहाँ कार्यान्वयन है। इसके अलावा, मैंने कंपाइलर को "-x उद्देश्य-सी ++" जोड़ा, लेकिन समस्या बनी रही। link के लिए परिषद द्वारा मुझे सहायता मिली, "फ़ाइल प्रकार" पैरामीटर पर ध्यान दें।

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