2013-07-06 100 views
1

我想第一次實現鏈式哈希表。我想創建一個列表向量。所以我宣佈了一個列表的向量爲私人。列表向量

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 [錯誤]鍵入模板參數列表在參數1 /值不匹配 '的模板類的std ::矢量'

基本上我的問題是List類型,所以如果我們可以聲明int的向量,那麼爲什麼不能聲明列表的向量?

+0

您應該更改問題的標題以反映實際問題。標題提到deques,但實際上你正在使用列表。 – Borgleader

回答

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行(列表中缺少模板參數的錯誤)。 This was compiled on 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] 
1

您必須指定列表應包含哪些類型作爲元素。你不能只說「一個清單」,你必須說「一些T型清單」。列表模板需要一個參數,就像向量一樣,所以你必須說一些類似於std::vector<std::list<char*> >的東西。如果不使用C++ 11,請小心在第一個>之後留出空格,否則它將不起作用,因爲它被解析爲>>運算符。