0
template<typename T> 
struct hash; 

template<typename T> class WUG{ 
    public: 
     WUG(){ 
      unordered_map<string,typename T,hash> vertexmap; //Problem 
     } 
}; 

このコードには何の意味もありません。私はそれを正しく宣言すべきですか?文字列をテンプレートにマップするunordered_mapを宣言する際にエラーが発生する

私がいるエラーメッセージは次のとおりです。
[エラー]テンプレート引数2無効
[エラー]テンプレート引数5であるあなたは含めstdな名前空間からすべての名前をインポートusing namespace std;を持って無効

+0

あなたは 'using namespace std;'を使っているようです。これにより、 'std :: hash'と宣言した' :: hash'との間に混乱が生じる可能性があります。 [MCVE]は順調です。さらに、コンパイラは 'T'が型を指定していることをよく知っています。これはテンプレート引数です。 –

+0

あなたのマップは3つの引数で構成され、マップは2つしか取り込まれません。これはキーの値のペアのようです - map zenwraight

+0

@zenwraightこれは間違っています。 ['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)には最大5つのテンプレート引数があり、そのうち3つはデフォルト値を提供します。 –

答えて

1

ですstd::hash、修正:

struct MyHash; 

template <typename T> 
class WUG { 
public: 
    WUG() { 
    unordered_map<string, T, MyHash> vertexmap; //Problem 
    } 
}; 

または標準ハッシュと:

template <typename T> 
class WUG { 
public: 
    WUG() { 
    unordered_map<string, T> vertexmap; //Problem 
    } 
}; 
+0

テンプレート用のstd :: hashは動作しますか? –

+1

@BatzorigZorigoo 'std :: hash 'を使いたいのであれば、マップに3番目のテンプレート引数を指定しないでください。これは 'std :: unordered_map'で使われたデフォルトのハッシング実装です。 –

+0

@BatzorigZorigoo 'std :: hash'は' std :: string'と他の多くの標準型で動作します。 – Yuki

関連する問題