質問

異なるコンパイラでコンパイルが異なる可能性がある考え方TR1.G++のみのように受け入れを含むのタイプ:

#include <tr1/unordered_map>
#include <tr1/memory>
...

がMicrosoftsコンパイラのみ受け付け:

#include <unordered_map>
#include <memory>
...

として理解していTR1、Microsoftがをすることから始まったのだ。

がわかりやすく伝えるためのG++は第二のバージョンになっていますか?にはどうすればよい一般の取り扱TR1でしょうか。

役に立ちましたか?

解決

マシンにブーストをインストールします。
次のディレクトリを検索パスに追加します。

<!> lt; Boost Install Directory <!> gt; / boost / tr1 / tr1

詳細については、 boost tr1 をご覧ください。

<!> lt; memory <!> gt;を含めると、 std :: tr1 :: shared_ptrを持つメモリのtr1バージョンを取得すると、プラットフォーム固有のバージョンの<!> lt; memory <!> gt;が含まれます。すべての通常のグッズを取得します。

他のヒント

#ifdef _WIN32
    #include <unordered_map>
    #include <memory>
#else
    #include <tr1/unordered_map>
    #include <trl/memory>
#endif

おそらく最良の方法は、単に boost ライブラリを使用することです。多くの場合、 TR1機能と同様のインターフェースであり、異なる(ただし一貫性のある)ヘッダーパスと名前空間にあります。これには、C ++ 0xの実装を開始していないコンパイラで作業するという利点があります。そして、TR1にはない便利なブーストライブラリがたくさんあります:)

別の方法として、G ++では、コマンドラインで--std = gnu ++ 0xを渡すこともできます。これは<!> lt; unordered_set <!> gt;で機能します。および<!> lt; unordered_map <!> gt ;、少なくとも。次に、std :: tr1:で使用できるようにします。

namespace std { namespace tr1 { using namespace std; } }

これは当然、悪です。代わりに、ブーストアプローチを強くお勧めします:)

ピhackyかできな追加のコンパイラtr1ディレクトリを含めます。

Windowsの場合、「tr1」ディレクトリをシステムパスに追加します。その後、#include <memory>は機能するはずです。

私は同じ質問を自問しました。残念ながら、技術報告書には、ヘッダーをどのように含めるべきかが記載されていません。拡張機能が:: std :: tr1名前空間にあることのみを定義します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top