2010-05-27 9 views
89

मैं साझा_ptr कहां स्थित है यह जानने की कोशिश कर कई घंटों के बाद मैं बहुत निराश हूं। मेरे द्वारा देखे जाने वाले उदाहरणों में से कोई भी shared_ptr (और काम करने) के लिए शीर्षलेख शामिल करने के लिए पूर्ण कोड दिखाता है। बस std, tr1 और <memory> बताते हुए बस मदद नहीं कर रहा है! मैंने बूस्ट और सब कुछ डाउनलोड किया है लेकिन फिर भी यह दिखाई नहीं देता है! क्या कोई मुझे यह कहकर मेरी मदद कर सकता है कि इसे कहां मिलना है?shared_ptr कहां है?

मुझे मेरी निराशाओं को दूर करने के लिए धन्यवाद!

संपादित करें: मुझे लगता है कि मेरा शीर्षक बदल दिया गया है। उसके लिए माफ़ करना। तो ... यह भी इसलिए था क्योंकि यह मुझे स्पष्ट नहीं था कि shared_ptr "सी ++ संस्करण निर्भर है" -> यही कारण है कि मैंने अपना पर्यावरण नहीं बताया -> इसलिए शायद यह मेरे लिए यह क्यों मुश्किल था।

मैं एमएसवीएस 2008 पर काम कर रहा हूं।

संपादित करें 2: मुझे नहीं पता कि क्यों, लेकिन मैं [स्मृति] और [बूस्ट/tr1/memory.hpp] और [बूस्ट/tr1/tr1/memory] शामिल था जबकि साझा_ptr के लिए हर जगह देख रहा था .. बेशक, मैं नहीं कर सका।

सभी प्रतिक्रियाओं के लिए धन्यवाद।

+3

पर सेट हो सकता है, यदि आप अपने सेटअप को सही ढंग से बता सकते हैं, जैसे कि कंपाइलर और बूस्ट वर्जन/इंस्टॉलेशन पथ – YeenFei

+7

जब तक आप C++ 0x पर नहीं हैं, तो 'shared_ptr' नहीं है मानक का हिस्सा। यह इतना आम है कि कुछ इसे मानक मानेंगे, भले ही यह अभी तक नहीं है। –

+4

आपको कैसे लगता है कि हमें यह जानने के बिना इस सवाल का जवाब देना चाहिए कि क्या आपका पर्यावरण 7.5 बिट डिशवॉशर चिप, 128 बिट मेनफ्रेम के स्वामित्व कंपाइलर या जीसीसी के एक्सकोड के संस्करण के लिए जीसीसी है या नहीं? – sbi

उत्तर

153

कम से कम तीन स्थानों पर जहां आप shared_ptr मिल सकता है कर रहे हैं:

  1. यदि आपका सी ++ कार्यान्वयन सी ++ 11 का समर्थन करता है (या कम से कम सी ++ 11 shared_ptr), तो std::shared_ptr को <memory> में परिभाषित किया जाएगा।

  2. यदि आपका सी ++ कार्यान्वयन सी ++ TR1 पुस्तकालय एक्सटेंशन का समर्थन करता है, तो std::tr1::shared_ptr संभावना होगी <memory> (माइक्रोसॉफ्ट विज़ुअल सी ++) या <tr1/memory> में (छ ++ के libstdC++)। बूस्ट एक टीआर 1 कार्यान्वयन भी प्रदान करता है जिसका आप उपयोग कर सकते हैं।

  3. अन्यथा, आप बूस्ट पुस्तकालयों को प्राप्त कर सकते हैं और boost::shared_ptr का उपयोग कर सकते हैं, जो <boost/shared_ptr.hpp> में पाया जा सकता है।

+3

वीएस 2008 के लिए, क्या आपको "फीचर पैक" मिला या आपने एसपी 1 स्थापित किया? यदि ऐसा है तो भाग 2 यहां आपके लिए लागू होता है, नामस्थान 'tr1' का उपयोग करें। –

+0

धन्यवाद। यह जादू की तरह काम करता है। मुझे नहीं पता क्यों, लेकिन मैं और और को साझा_ptr के लिए हर जगह देख रहा था .. बेशक, मैं नहीं कर सका। एक बार फिर धन्यवाद। – Jake

+0

संक्षेप में सी ++ से दूर कदम उठाने के बाद मुझे आश्चर्य हुआ कि (clang v3.1 में) 'shared_ptr' अभी भी' tr1' नामस्थान में बैठा था। इस पर कोई विचार? – hiwaylon

6

सुविधा पैक अद्यतन के साथ VS2008 के लिए, shared_ptr नाम स्थान एसटीडी अंतर्गत मिल सकता है :: tr1।

std::tr1::shared_ptr<int> MyIntSmartPtr = new int; 

अगर आप (उदाहरण @C:\Program Files\Boost\boost_1_40_0 के लिए) स्थापना पथ को बढ़ावा देने के लिए किया था की

अपने आईडीई सेटिंग्स को जोड़ा गया:

#include <boost/shared_ptr.hpp> 
4

तो आप प्रवेश के लिए देख Bor boost के shared_ptr, आप आसानी से हो सकता था googling shared_ptr से जवाब मिला, डॉक्स के लिंक का अनुसरण, और इस तरह this के रूप में एक पूरा काम कर उदाहरण ऊपर खींच रहा है।

#include <boost/shared_ptr.hpp> 

struct MyGizmo 
{ 
    int n_; 
}; 

int main() 
{ 
    boost::shared_ptr<MyGizmo> p(new MyGizmo); 
    return 0; 
} 

#include के लिए आदेश हैडर खोजने के लिए, पुस्तकालयों स्पष्ट रूप से खोज पथ में होने की जरूरत है:

किसी भी मामले में, यहाँ एक minimalistic आप के लिए उदाहरण काम कर पूरा जो मैं सिर्फ हैक की गई है । एमएसवीसी में, आप इसे प्रोजेक्ट सेटिंग्स> कॉन्फ़िगरेशन प्रॉपर्टीज> सी/सी ++> अतिरिक्त निर्देशिकाएं शामिल करते हैं। मेरे मामले में, यह C:\Program Files (x86)\boost\boost_1_42

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