2012-04-26 12 views
14

में संकलन त्रुटि नहीं मिली है मुझे एक्सकोड में संकलन त्रुटि नहीं मिली है। मेरे पास एक आईओएस ऐप प्रोजेक्ट है जो मैं उद्देश्य-सी और सी ++ मिश्रण के रूप में उपयोग करता हूं।<string> शामिल करें Xcode 4.2

प्रारंभ में, मैंने अपने आईओएस प्रोजेक्ट में एक .h फ़ाइल और एक .cpp फ़ाइल बनाई। फिर, मैंने .cpp फ़ाइल को .mm फ़ाइल में बदल दिया।

यहां मेरी .h फ़ाइल है;

TestLog.h

#ifndef CalculatorDemo_TestLog_h 
#define CalculatorDemo_TestLog_h 
#include <string> 
using namespace std; 

class TestLog 
{ 
private: 
    string logString; 
public: 
    void Log(string logMessage); 
}; 


#endif 

TestLog.mm

#include "TestLog.h" 

void TestLog::Log(string logMessage) 
{ 
    //this->logString->append(logMessage); 

} 

क्या मुझे याद आ रही? क्या मुझे अपने लक्ष्य में std C++ लाइब्रेरी जोड़ने की ज़रूरत है? खोज शीर्षलेख पथ से संबंधित कुछ?

मुझे केवल स्ट्रिंग प्रकार का उपयोग करने की आवश्यकता है।

अग्रिम में

+0

निश्चित रूप से ऐसा लगता है * काम करना चाहिए ... लेकिन, क्या कोई कारण है कि आप इसके बजाय 'NSString' का उपयोग नहीं कर रहे हैं? –

+0

ऐसा लगता है कि एक्सकोड में डिफ़ॉल्ट रूप से std पथ शामिल नहीं हैं, मुझे लगता है कि आपको इसे मैन्युअल रूप से करने की आवश्यकता है। .h फ़ाइलों में उपयोग करने के लिए भी उपयोग करने से बचें इसे कार्यान्वयन फ़ाइल में करें या इसका उपयोग न करें। – AlexTheo

उत्तर

4

एक नज़र यहाँ ले लो यह आपकी मदद कर सकता है: http://www.iphonedevsdk.com/forum/iphone-sdk-development/16528-how-include-stl-xcode.html

+0

सी ++ कोड (और मानक सी ++ पुस्तकालयों) का उपयोग करने के लिए आवश्यक अनुप्रयोगों के लिए, यह एक पढ़ा जाना चाहिए! इस जवाब को खोजने में कठोर लेकिन बदतर है, इससे मुझे एक से अधिक बार मदद मिली है! धन्यवाद! : डी – javatarz

+1

इस धागे में समस्या का कुछ विवरण स्वागत किया जाएगा। – AbiusX

+1

कृपया अपने उत्तर में दिए गए प्रश्न का उत्तर दें, केवल एक लिंक पोस्ट करने के बजाय जो कई (कुछ अनुपयोगी) उत्तरों के साथ फ़ोरम पर सड़ांध कर सकता है। –

1

मुझे विश्वास है कि आपको लाइब्रेरी में पूरा पथ शामिल करने की आवश्यकता है। इसी तरह "नींव" & "uiview" ढांचे के रूप में कहने के लिए।

#import <Foundation/Foundation.h> 

या

#import <UIKit/UIKit.h> 

और हाँ, यकीन है कि आप अपने लक्ष्य को पुस्तकालय जोड़ने बनाते हैं।

5

चयन परियोजना -> स्थापित करने का निर्माण -> सेब LLVM संकलक 5.1 -> भाषा

Objective-C++

2

करने के लिए Compile Sources As परिवर्तन में वहाँ एक मोड़ है एक्सकोड में। मैंने इसे 7.3 में देखा। अधिकांश परियोजनाएं। एमएम फाइलों और एसटीएल को पहचानती हैं, जबकि एक परियोजना मैंने नहीं की थी। फिक्स यह था कि मुझे शीर्ष-बाएं प्रोजेक्ट आइकन पर क्लिक करना था, फिर लक्ष्य> बिल्ड चरण> लाइब्रेरीज़ के साथ लिंक बाइनरी> पर क्लिक करें और AppKit.framework में जोड़ें। इसके बाद, मुझे "संकलित स्रोत" पर लक्ष्य> बिल्ड सेटिंग्स> खोज पर क्लिक करना था, और इसे सभी संभावित कॉलम पर "उद्देश्य C++" पर सेट करना था। फिर, उत्पाद मेनू से एक क्लीन और फिर एक बिल्ड करें। यह ठीक से संकलित किया गया। फिर, उस संकलन स्रोतों पर दोबारा वापस जाएं और इसे सभी संभावित कॉलम पर "फ़ाइल प्रकार के अनुसार" पर वापस सेट करें। फिर, उत्पाद मेनू से फिर से बिल्ड पर क्लिक करें। उस बिंदु पर, यह ठीक से संकलित हुआ और मुझे "फ़ाइल प्रकार के अनुसार" विकल्प का उपयोग करने की अनुमति दी, जिसे मैं बेहतर पसंद करता हूं।

ओह, और यदि कोको सामान कर रही है, मत भूलना आपकी फ़ाइलों में निम्नलिखित शीर्ष लेख जोड़ने के लिए:

#import <Cocoa/Cocoa.h> 

और कमांड लाइन सामान कर रही हैं, भूल जाते हैं की निम्नलिखित बजाय जोड़ना नहीं कोको हेडर:

#import <Foundation/Foundation.h> 
+0

महान उत्तर! धन्यवाद! मैंने सोचा कि मैं अपना दिमाग खो रहा था ... मेरे एक्सकोड को 7 से 8 तक अपग्रेड किया और अचानक मेरे सी ++ कोड को पहचाना नहीं जा रहा था ... धन्यवाद! – NpC0mpl3t3

0

तो मुझे कोकोपोड्स लाइब्रेरी बाईपास के साथ यह समस्या हो रही थी और इनमें से किसी भी समाधान ने कुछ भी नहीं किया। समस्या एक फाइल के साथ थी जो कोकोपोड्स को छाता हेडर कहा जाता है। यह <POD_NAME>/Support Files/<POD_NAME>-umbrella.h में स्थित है। इसे हटाएं, और इसे ठीक से बनाना चाहिए।

अब यह जरूरी क्यों है कि स्पष्टीकरण के लिए: छाता हेडर सीधे सीडी + और ऑब्जेक्टिव-सी कोड दोनों को एक शीर्षलेख में मिला रहा है जो स्पष्ट रूप से बड़ा नहीं है और सी ++ आयात को पूरी तरह से तोड़ देता है। इसे हटाकर (जो कि कोई प्रभाव नहीं पड़ता है?) यह विवादित आयात जो कोकोपोड अनजाने में बनाया गया है, दूर जायेगा।

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