我有一个名为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
的构造函数以接受分配的方法调用?我不确定发生了什么问题或如何解决,任何帮助都将不胜感激。
[对这一件事感到不可思议,我已经解决了。将mkHash
的声明更改为static
,并为hash_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 = hash_t::mkHash(key);
}
};
谢谢您的贡献