कहां साझा किया गया है?


103

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

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

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

मैं MSVS2008 पर काम कर रहा हूं।

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

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


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

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

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

बस मुझे सामने आई समस्या के बारे में कुछ जानकारी जोड़ने के लिए .. यदि आप c ++ 0x मानक के साथ संकलन करना चाहते हैं तो आपको g ++ के तर्क के रूप में "-std = c ++ 0x" जोड़ना होगा।
मिताल वोरा

1
यदि आप MSVC में हैं, तो आपको बस "#include <memory>" की आवश्यकता है (gcc के लिए, मेरे पास खोज के लिए CMake फाइंड () है ताकि मैं प्रीप्रोसेसर परिभाषा को घोषित कर सकूं <या बढ़ावा देने / share_ptr.pp> बनाम <। tr1 / share_ptr.h> पहली पसंद के रूप में बूस्ट होने पर tr1 होने पर ध्यान दें - ध्यान दें कि बूस्ट "hpp" है, जबकि1 है .1 ".h" - गेंटू / फेडोरा / डेबियन पर सत्यापित - और निश्चित रूप से यह भी सुनिश्चित करें कि <ainclude <memory> है मेमोरी मैनेजमेंट के लिए अलग से)
हिदेकीएआई

जवाबों:


168

कम से कम तीन जगहें हैं जहाँ आप पा सकते हैं shared_ptr:

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

  2. यदि आपका C ++ कार्यान्वयन C ++ TR1 लाइब्रेरी एक्सटेंशन का समर्थन करता है, तो std::tr1::shared_ptrसंभवतः <memory>(Microsoft Visual C ++) या <tr1/memory>(g ++ का libstdc ++) में होगा। बूस्ट एक TR1 कार्यान्वयन भी प्रदान करता है जिसका आप उपयोग कर सकते हैं।

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


3
VS 2008 के लिए, क्या आपको "फ़ीचर पैक" मिला है या आपने SP1 स्थापित किया है? यदि ऐसा है तो यहाँ भाग 2 आप पर लागू होता है, नाम स्थान का उपयोग करें tr1
केट ग्रेगोरी

धन्यवाद। यह जादू की तरह काम करता है। मुझे नहीं पता कि क्यों, लेकिन मैं <memory> और <boost / tr1 / memory.hpp> और <boost / tr1 / tr1 / memory> को शामिल कर रहा था, जबकि हर जगह share_ptr के लिए हर जगह देख रहा था। एक बार फिर धन्यवाद।
जेक

C ++ से थोड़ी दूर जाने के बाद मुझे यह जानकर आश्चर्य हुआ कि (clang v3.1 में) shared_ptrअभी भी एक tr1नाम स्थान पर बैठा था । इस पर कोई विचार?
१३:

3
@hiwaylon: आप के साथ संकलन कर रहे हैं -std=c++11?
जेम्स मैकनेलिस

@JamesMcNellis Yessir, दुर्भाग्यवश अन्य आश्रितों के साथ कुछ अनहोनी हुई और मैं इसे जारी रखने में असमर्थ था (समय की कमी के कारण)। यदि -std = c ++ 11 चाल है, तो मैं विश्वास के साथ जारी रख सकता हूं जब मैं परियोजना में वापस आने में सक्षम हूं। धन्यवाद।
hiwaylon


6

VS2008 के लिए फीचर पैक अपडेट के साथ, names_ace std :: tr1 के तहत साझा किया जा सकता है।

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

का

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

#include <boost/shared_ptr.hpp>

3

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

किसी भी मामले में, यहां आपके लिए एक न्यूनतम कार्यशील उदाहरण है जिसे मैंने अभी हैक किया है:

#include <boost/shared_ptr.hpp>

struct MyGizmo
{
    int n_;
};

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

के लिए आदेश में #includeशीर्ष लेख को खोजने के लिए, पुस्तकालयों स्पष्ट रूप से खोज पथ में होने की जरूरत है। MSVC में, आपने इसे प्रोजेक्ट सेटिंग्स> कॉन्फ़िगरेशन गुण> C / C ++> अतिरिक्त शामिल निर्देशिकाएँ में सेट किया है। मेरे मामले में, यह निर्धारित हैC:\Program Files (x86)\boost\boost_1_42

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.