gpt4 book ai didi

c++ - 在结构的构造函数中使用类方法分配变量

转载 作者:行者123 更新时间:2023-11-28 01:17:23 26 4
gpt4 key购买 nike

我有一个名为 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 方法,我们获取 key ,将其传递给 mkHash 并返回 key 的哈希版本。

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);
}
};

感谢您的贡献

关于c++ - 在结构的构造函数中使用类方法分配变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58229405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com