Ответ 1
std::tr1::shared_ptr
является частью дополнений TR1 к С++ STL.
С GCC он доступен либо через #include <tr1/memory>
(GCC 4.1), либо #include <memory>
(GCC 4.3)
Я пытаюсь использовать std::shared_ptr
в своем коде. Я видел, что были другие вопросы по этому вопросу, но я все еще получаю ошибку компилятора. У меня есть правильная версия gcc и настройка?
Что я сделал:
Я попытался скомпилировать свой код с обоими заголовками отдельно — <memory>
и <tr1/memory>
, но все равно получить ошибки ниже в обоих случаях.
Версия gcc, которую я использую,
gcc --version
gcc (GCC) 4.3.2
Когда я включаю заголовок <memory>
, я использую std::shared_ptr
и с заголовком <tr1/memory>
использую std::tr1::shared_ptr
? Правильно ли это?
Я установил shared_ptr следующим образом:
std::shared_ptr<A*> ptr_A = shared_ptr( new A() );
Ошибка, которую я получаю, выглядит следующим образом:
src/WH.cxx:156: error: 'shared_ptr' is not a member of 'std'
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope
когда я пытаюсь заголовок <tr1/memory>
src/WH.cxx:156: error: 'std::tr1' has not been declared
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope
Похоже, я не включаю что-то правильно. Любые идеи?
Я знаю, что библиотека boost имеет shared_ptr
, но сейчас эти библиотеки не подходят для меня.
EDIT: Чтобы добавить, мои параметры компилятора следующие: g++ -O3 -g3 -m32 -fPIC -Wno-deprecated -pthread -m32 Я что-то пропустил?
P.S. Есть ли полезная литература по умным указателям std?
std::tr1::shared_ptr
является частью дополнений TR1 к С++ STL.
С GCC он доступен либо через #include <tr1/memory>
(GCC 4.1), либо #include <memory>
(GCC 4.3)
Вы также просили ссылки или литературу...
Я нашел 3 статьи, которые могут помочь:
std::shared_ptr
.shared_ptr
вместе с образцом кода.Также комментарий к вашему примеру кода:
std::shared_ptr<A*> ptr_A = shared_ptr( new A() );
Аргумент шаблона должен быть A вместо A *:
std::shared_ptr<A> ptr_A = shared_ptr( new A() );
Если у вас нет shared_ptr
в std, вы можете использовать его из boost.
#include <boost/shared_ptr.hpp>
boost::shared_ptr<A> ptr_A( new A() );