У меня есть класс с именем hash_t
. Класс содержит структуру с именем node_t
и соответствующий ему конструктор.
struct node_t
{ node_t *next;
string key;
TYPE data;
node_t(string _key, TYPE &_data)
{ next = nullptr;
data = _data;
key = _key;
}
};
Используя метод hash_t, показанный ниже, мы берем ключ, передаем его в mkHash и возвращаем хешированную версию ключа.
uint64_t mkHash(const string &strng)
{ const unsigned char *str = (const unsigned char*)(strng.c_str());
unsigned char ch;
uint64_t rslt = 5123;
while ((ch=*str++) != '\0')
rslt = rslt * 33 + ch;
return rslt;
}
По сути, я пытаюсь изменить класс node_t для создания хеша в его конструкторе, чтобы сравнивать значения хешей вместо ключей, так как при этом должно использоваться меньше сравнений. Мой мыслительный процесс состоял в том, чтобы запустить метод mkHash
внутри конструктора, чтобы присвоить хэш node_t
как таковой:
struct node_t
{ node_t *next;
string key;
TYPE data;
uint64_t hsh;
node_t(string _key, TYPE &_data)
{ next = nullptr;
data = _data;
key = _key;
hsh = mkHash(key);
}
};
И я получаю это от MinGW:
error: cannot call member function 'uint64_t hash_t<TYPE>::mkHash(const string&) [with TYPE = std::__cxx11::basic_string<char>; uint64_t = long long unsigned int; std::__cxx11::string = std::__cxx11::basic_string<char>]' without object
Как мне заставить конструктор node_t
принять вызов метода для присваивания? Я не уверен, что идет не так, или как это исправить, и любая помощь очень ценится.