2012-01-28 12 views
3

私は自宅のコンピュータでVisual C++を使ってクラスのプログラムを書いていましたが、学校のLinuxコンピュータで実行しようとしましたが、これらのエラーが発生します。C++でunordered_mapでエラーが発生しましたか?

std::tr1::unordered_map <string, Word*> map; 

これらのエラーの両方ISO C++のないタイプ予想

と 'unordered_map' の宣言を禁止

上記のコードの行に '; '<' トークン

前もともと私はhash_mapを使用しましたが、Visual C++でしか使用できないことがわかりました

ありがとう

答えて

3

GCCとMSVCは、TR1標準がユーザーにどのように供給されるべきかについて曖昧であるため、TR1拡張をさまざまな方法で定義します。単に、TR1を有効にするためのコンパイラオプションが必要であることを指定します。

MSVCとは異なり、GCCはヘッダーをTR1サブディレクトリに置きます。それらにアクセスする方法は2通りあります。

  1. コマンドラインオプション-isystem /usr/include/c++/<GCC version>/tr1を追加します。これはより適合していますが、問題を引き起こすようです。
  2. 使用条件付きコンパイル:これはGCCの不適合を公開

    #ifdef __GNUC__ 
    #include <tr1/unordered_map> 
    #else 
    #include <unordered_map> 
    #endif 
    

    :TR1は、オプションを設定することによって活性化されるのではなく、コードを変更することによって。

    計算されたヘッダー名は多少秘密です。

    #ifdef __GNUC__ 
    #define TR1_HEADER(x) <tr1/x> 
    #else 
    #define TR1_HEADER(x) <x> 
    #endif 
    
    #include TR1_HEADER(unordered_map) 
    

    このようにして、「一度」のものを含めるだけで済みます。

+0

ああ、http://stackoverflow.com/questions/5952602/using-tr1-libraries-in-gcc-and-msvcも参照してください。明らかにBoost.TR1がありますが、完璧ではありません。 – Potatoswatter

関連する問題