2012-11-18 8 views
13

ここに何か不足しているようです。私はboost::shared_ptrからstd::shared_ptrに移動しました。 shared_ptrは戻って2000年代半ばにおけるTR1の一部であった、そしてそれは、Appleの下でshared_ptrを使用しようとすると、2012年アップルとshared_ptr

でどこでも利用可能であるべきである私に未定義の参照のスルーを取得します。

SecureArray.h:26:12: error: no member named 'shared_ptr' in 
     namespace 'std' 
using std::shared_ptr; 
     ~~~~~^ 
SecureArray.h:27:12: error: no member named 'tr1' in namespace 
     'std' 
using std::tr1::shared_ptr; 
     ~~~~~^ 
SecureArray.h:487:5: error: unknown type name 'shared_ptr' 
    shared_ptr<SecureVector> m_vector; 

典型的なコンパイラのコマンド以下のように(GCCとクランの両方が失敗した)である:

clang++ -g2 -ggdb -O0 -fcatch-undefined-cxx0x-behavior 
    -DSAFEINT_DISALLOW_UNSIGNED_NEGATION=1 -pipe -std=c++0x -Wall -Wextra 
    -Wno-unused-parameter -Wno-tautological-compare 
    -I. -I./esapi -I./deps -I/usr/local/include -I/usr/include -fpic 
    -c src/DummyConfiguration.cpp -o src/DummyConfiguration.o 

次のように私はこれを微調整する必要があると考えている(それを含めるようにしようとしているが、私はここを見て「と言ってC++の構文を覚えていません。 、または見てください):

#include <memory> 
using std::shared_ptr; 
using std::tr1::shared_ptr; 

Appleのmanページには何も上げされていません。

$ man shared_ptr 
No manual entry for shared_ptr 
$ man -k shared_ptr 
shared_ptr: nothing appropriate 

私は、Mac OS X 10.8(完全にパッチ)、Xcodeの(完全にパッチを適用)、およびコマンドラインツールがインストールされています。

Appleプラットフォームではどのようにstd :: shared_ptrを使用しますか?

+0

'apple'はいいタグのようには見えません –

+0

どのツールチェーンのバージョンですか?それは本当に重要なことです。率直に言って私はあなたのOSについてはあまり気にしませんでした! –

+0

ありがとうライトネス。理解しています。私はAppleについてもあまり気にしない。 – jww

答えて

20

#include <tr1/memory>は、どちらのコンパイラでもlibstdC++を使用して動作します。あるいは、Clangと:

#include <memory> 
using std::shared_ptr; 

c++ -std=c++11 -stdlib=libc++ ...でコンパイルしてください。 ClangがデフォルトでlibstdC++を使っている理由はわかりません。おそらくそれはGCCとの互換性のためです。

libstdC++にマニュアルページがないため、マニュアルページが見つかりません。役に立った、それじゃない。ソースディストリビューションにはHTMLドキュメントがあります。

+0

パーフェクト、ありがとう。 – jww

+0

「役立つ、それじゃない?」 - 私たちは年をとっているのですか? – jww

関連する問題