1

初めて連鎖ハッシュテーブルを実装しようとしています。リストのベクトルを作成することを考えました。そこで、リストのベクトルを private として宣言しました。

class HashTable{
public:
    HashTable( int ) ;
    void add( int k ) ;
    int remove( int k ) ;
    int find( int k ) ;
private:
    vector< list > t ;
    int n ; 
    int hash( int ) ; 
};

次のエラーが表示されます:

\HashTable.cpp [エラー] 'template class std::vector' のテンプレート パラメーター リストの引数 1 での型/値の不一致

基本的に私の質問は List a type です。したがって、int のベクトルを宣言できる場合、リストのベクトルを宣言できないのはなぜですか?

4

2 に答える 2

3

リストのテンプレート引数を忘れました。list次のようなリストでなければならないということはできstd::list<int>ません(intは他の型にすることができますが、他のすべてのメンバー関数はintを使用するため、私の例ではintを使用しました)

次のコードは、問題を示しています。

#include <vector>
#include <list>

int main(int argc, char* argv[])
{
    std::vector< std::list<int> > v; // this compiles 
    std::vector<std::list> v2;  // and this doesn't

    return 0;
}

以下に示すように、すべてのコンパイル エラーは 7 行目 (list のテンプレート引数が欠落している行) からのものです。これはideoneでコンパイルされました

prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:7:26: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::vector’
prog.cpp:7:26: error:   expected a type, got ‘list’
prog.cpp:7:26: error: template argument 2 is invalid
prog.cpp:7:30: error: invalid type in declaration before ‘;’ token
prog.cpp:7:28: warning: unused variable ‘v2’ [-Wunused-variable]
于 2013-07-06T15:45:09.540 に答える
1

リストに要素として含めるタイプを指定する必要があります。「リスト」とだけ言うことはできません。「ある種のタイプ T のリスト」と言う必要があります。リスト テンプレートは vector と同じように引数を取るので、 のように言う必要がありますstd::vector<std::list<char*> >>C++11 を使用していない場合は、最初の後にスペースを残すように注意してください。そうしないと、>>演算子として解析されるため機能しません。

于 2013-07-06T15:45:22.110 に答える