Ошибка при инициализации вектора списков

#c #list #vector #initialization

#c #Список #вектор #инициализация

Вопрос:

Вот мой код:

 ...
using namespace std;
class QueryProcessor {
int bucket_count;

vector<list<string> > hash_row(bucket_count);

size_t hash_func(const stringamp; s) const {
    static const size_t multiplier = 263;
    static const size_t prime = 1000000007;
    unsigned long long hash = 0;
    for (int i = static_cast<int> (s.size()) - 1; i >= 0; --i)
        hash = (hash * multiplier   s[i]) % prime;
    return hash % bucket_count;
}

public:
explicit QueryProcessor(int bucket_count): bucket_count(bucket_count) {}
...
  

и возникает эта ошибка: [Ошибка] ‘bucket_count’ не является типом.
Что не так с моим объявлением?

Ответ №1:

Что не так с моим объявлением?

Вы не можете объявить и инициализировать переменную-член подобным образом.

Вы можете объявить его как:

 vector<list<string> > hash_row;
  

и инициализируйте элемент в конструкторе с помощью:

 explicit QueryProcessor(int bucket_count): bucket_count(bucket_count),
                                           hash_row(bucket_count) {}
  

Комментарии:

1. Но когда я удаляю его из любых классов, например:

2. Но когда я помещаю его из любых классов, например так: используя пространство имен std; int main(){ int n; vector<list<int> > hash(n); cin >> n; for(int i = 0; i < 10; i ) hash[0].push_front(i); for(list<int>::iterator i = hash[0].begin(); i != hash[0].end(); i ){ cout <<*i << » «; } возвращает 0; } Работает правильно!

3. Это работает, потому что вы не объявляете и не инициализируете переменную-член класса. Вы объявляете и инициализируете локальную переменную функции.