2010-05-27 5 views
89

Я так расстроен сейчас, после нескольких часов, пытаясь найти, где находится shared_ptr. Ни один из примеров, которые я вижу, не показывает полный код для включения заголовков для shared_ptr (и работает). Просто заявка std, tr1 и <memory> не помогает вообще! Я загрузил boosts и все, но все же он не появляется! Может ли кто-нибудь помочь мне, указав, где его найти?Где находится shared_ptr?

Спасибо, что позволил мне выразить свои разочарования!

EDIT: Я вижу, что мое название было изменено. Извини за это. Итак ... это было также из-за того, что мне было непонятно, что shared_ptr «зависит от версии C++» -> поэтому я не указал свою среду -> поэтому, вероятно, почему мне так трудно найти его.

Я работаю над MSVS2008.

EDIT 2: Я не знаю почему, но я включил [память] и [boost/tr1/memory.hpp] и [boost/tr1/tr1/memory], ища везде для shared_ptr .. конечно, я не мог.

Спасибо за все ответы.

+3

Возможно, это будет полезно, если вы сможете правильно указать свою установку, например, какой компилятор и повысить версию/путь установки – YeenFei

+7

Если вы не на C++ 0x, 'shared_ptr' не является часть стандарта. Это так часто, хотя некоторые из них будут относиться к нему как к стандартному, хотя его пока нет. –

+4

Как вы думаете, что мы должны ответить на этот вопрос, не зная, является ли ваша среда GCC для чипа 7.5-гигабайтной посудомоечной машины, проприетарного компилятора 128-битного мейнфрейма или версии GCC XCode? – sbi

ответ

153

Есть по крайней мере три места, где вы можете найти 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> (г ++ с libstdC++). Boost также предоставляет реализацию TR1, которую вы можете использовать.

  3. В противном случае вы можете получить библиотеки Boost и использовать boost::shared_ptr, который можно найти в <boost/shared_ptr.hpp>.

+3

Для VS 2008 вы получили «пакет функций» или вы установили SP1? Если это так, то часть 2 здесь применима к вам, используйте пространство имен 'tr1'. –

+0

Спасибо. Это работает как магия. Я не знаю, почему, но я включил и и , глядя повсюду в shared_ptr .. Конечно, я не мог. Еще раз спасибо. – Jake

+0

Ускорившись от C++, я с удивлением обнаружил, что (в 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) добавлен в настройках IDE:

#include <boost/shared_ptr.hpp> 
4

Если your'e ищет бору boost «s 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 найти заголовок, библиотеки, очевидно, должны быть в пути поиска , В MSVC вы устанавливаете это в настройках проекта> Свойства конфигурации> C/C++> Дополнительные каталоги включения. В моем случае это установлено на C:\Program Files (x86)\boost\boost_1_42

Смежные вопросы