2010-12-16 11 views
14

से कॉलिंग सी ++ विधि में मेरे पास निम्न फ़ाइलें हैं।उद्देश्य सी

foo.h (सी ++ हेडर फाइल)
foo.mm (सी ++ फाइल)
test_viewcontroller.h (उद्देश्य सी हेडर फाइल)
test_viewcontroller.m (वस्तुनिष्ठ सी फाइल)

मैं घोषणा की है एक विधि donothing() foo.h में और foo.mm.Lets में यह परिभाषित कहते हैं कि यह

डबल donothing (डबल क) {एक वापसी है, }

अब, मैं

डबल var = donothing (somevar) test_viewcontroller.m में इस कार्य को करने के लिए प्रयास करें;

मैं लिंकर त्रुटि जो "प्रतीकों नहीं मिल सकता है" _donothing() test_viewcontroller.o
collect2 में कहते हैं मिलती है: ld 1 से बाहर निकलें स्थिति

किसी को भी कृपया मुझे क्या गलत है के रूप में इंगित कर सकते लौटे?


मुझे सटीक होना करते हैं:

#ifdef __cplusplus 

extern "C" 
{ 
     char UTMLetterDesignator(double Lat); 
     NSString * LLtoUTM(double Lat,double Long,double UTMNorthing, double UTMEasting); 
     double test(double a); 
} 

#endif 

@Carl

मैं अपने कोड sample.Are कह रही है कि मैं ifdef.I में केवल परीक्षण() विधि रैप करने के लिए की जरूरत को शामिल किया है यह समझ में नहीं आता कि यह क्या अंतर कर सकता है। क्या आप कृपया समझा सकते हैं?

उत्तर

34

test_viewcontroller.mdonothing() के लिए गैर-सी ++ - उलझन वाले प्रतीक नाम की तलाश में है। अपना एक्सटेंशन .mm पर बदलें और आपको अच्छा होना चाहिए। वैकल्पिक रूप से, C++ फ़ाइल को संकलित करते समय foo.h में अपनी विधि घोषणा पर extern "C" घोषणा करें।

foo.h:

#ifdef __cplusplus 
extern "C" { 
#endif 

double donothing(double a); 

#ifdef __cplusplus 
} 
#endif 

foo.mm:

#include "foo.h" 

double donothing(double a) 
{ 
    return a; 
} 

test_viewcontroller.m:

#import "foo.h" 

- (double)myObjectiveCMethod:(double)x 
{ 
    return donothing(x); 
} 
+1

मैं

आप इसे इस तरह लग रहे करना चाहते हैं बाहरी "सी" जोड़ने की कोशिश की। लेकिन मुझे एक नई त्रुटि मिलती है - "अपेक्षित आईडीन टिफायर या '(' स्ट्रिंग निरंतर से पहले ' – Janani

+0

@ वाहर्स, आपको केवल' सी ++ के लिए 'बाहरी' सी '' जोड़ने की आवश्यकता है - इसका मतलब है कि इसे '#ifdef __cplusplus' ब्लॉक में लपेटना है। –

+0

@ करल - प्रतिक्रिया के लिए बहुत बहुत धन्यवाद! लिंकर त्रुटि अब चली गई है !! लेकिन मुझे "test_viewcontroller.m" में एक नई चेतावनी मिली - फ़ंक्शन "डोनिंग()" की निहित घोषणा। मुझे विश्वास है कि यह तब होता है जब मैंने हेडर फ़ाइल को शामिल नहीं किया है जिसमें फ़ंक्शन घोषणा है। लेकिन मेरे पास एक आयातित foo.h है "test_viewcontroller.m" में। क्या आप कृपया मुझे बताएं कि क्या गलत है? – Janani