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

问题描述 投票:0回答:2

我有一个名为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的构造函数以接受分配的方法调用?我不确定发生了什么问题或如何解决,任何帮助都将不胜感激。

c++ hash
2个回答
1
投票

[对这一件事感到不可思议,我已经解决了。将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);
    }
};

谢谢您的贡献

© www.soinside.com 2019 - 2024. All rights reserved.