2015-03-07 19 views
10

मैं एंड्रॉइड स्टूडियो (ndk r10d) में एंड्रॉइड एप्लिकेशन को संकलित करने का प्रयास कर रहा हूं जो कुछ C++ कोड का उपयोग करता है। मुझे सी ++ 11 की आवश्यकता है इसलिए मैंने -std=gnu++11 जोड़ा (मुझे उपयोग किए जा रहे एक्सटेंशन के लिए c++11 के बजाय gnu++11 की आवश्यकता है)। मैं stlport stl का उपयोग कर रहा हूं, अन्य पुस्तकालयों के कारण मैं इस एसएलएल लाइब्रेरी का उपयोग कर रहा हूं। तो मेरी CFLAGS और एसटीएल मापदंडों build.gradle फ़ाइल में इस तरह दिखता है:त्रुटि प्राप्त करना: नामस्थान 'std' में 'shared_ptr' किसी प्रकार का नाम नहीं है

stl "stlport_static" 
cFlags " mylib1.a mylib2.a ... -fexceptions -frtti -std=gnu++11" 

मैं भी शामिल किया है स्मृति: #include <memory>

जब संकलित करने के लिए मैं यह त्रुटि प्राप्त की कोशिश कर रहा:

'shared_ptr' in namespace 'std' does not name a type 

मैं अभी तक स्मार्ट पॉइंटर्स के लिए बूस्ट कार्यान्वयन का उपयोग कर रहा हूं लेकिन सी ++ 11 के कदम के साथ मैं मानक कार्यान्वयन का उपयोग करूंगा।

+0

त्रुटि का कारण क्या वास्तविक कोड है? –

+0

मूल त्रुटि इस परिभाषा पर है जिसे मैंने कोड कम करने के लिए जोड़ा है लेकिन जहां भी मैं इस मैक्रो का उपयोग करने का प्रयास करता हूं, त्रुटियों में त्रुटियों को देखा जाता है: #define myapp_shared_ptr std :: shared_ptr – royeet

+0

shared_ptr किसी प्रकार का नाम नहीं है। यह एक प्रकार का टेम्पलेट नाम है। क्या आप वाकई इसका इस्तेमाल करते समय साझा_ptr कर रहे हैं? जब मैं इसे छोड़ देता हूं तो त्रुटि मुझे "क्लास टेम्पलेट के उपयोग के लिए टेम्पलेट तर्कों की आवश्यकता होती है" – Charlie

उत्तर

1

@ टी.सी. ऐसा लगता है कि आप सही थे। मैंने अपनी समस्या के समाधान के दौरान एक अलग प्रश्न पर आपका दावा देखा, लेकिन जैसा कि पुस्तकालयों का मैं उपयोग कर रहा हूं, सी ++ 11 और एसटीएलपोर्ट के साथ संकलित है, मैंने सोचा कि यह दावा सत्य नहीं हो सकता है।

मुझे क्या लगता है कि पुस्तकालय जो मैं उपयोग कर रहा हूं वह किसी भी सी ++ 11 सुविधाओं का उपयोग नहीं कर रहा है जो एसटीएलपोर्ट गायब है। वे केवल सी ++ 11 फीचर्स का उपयोग कर रहे हैं जो जीसीसी कंपाइलर का समर्थन करता है। मुझे उपयोग की जाने वाली सुविधाओं का समर्थन करने के लिए gnuStl की आवश्यकता है।

मेरा समाधान स्मार्ट पॉइंटर्स और अन्य सभी गायब सी ++ 11 सुविधाओं के लिए बढ़ावा कार्यान्वयन का उपयोग करना था।

+0

हां, जीएनयू एसटीएल सभी सी ++ 11 सुविधाओं का समर्थन करता है। – juzzlin

11

http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared अपने कोड में हेड फ़ाइल का उपयोग करें।

#include <iostream> 
#include <memory> 
+1

क्या यह आवश्यक है? –

+1

मुझे यह वही समस्या थी और stlport_static का उपयोग करते समय shared_ptr को में परिभाषित नहीं किया गया है। यह जवाब व्यर्थ है। – juzzlin

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