2013-07-06 4 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 в списке параметров шаблона для 'шаблонного класса станд :: вектор'

В основном мой вопрос: List type, так что если мы можем объявить вектор int так, то почему can not vector of list будет объявлен?

+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, иначе это не сработает, потому что он разобран как оператор >>.

Смежные вопросы