如何在我的自定义类中使用QHash

anb*_*van 4 c++ qt

我是qt的新手并且学习如何处理QHash的工作.在使用这个例子我不明白为什么这会引发我的错误.我可能会遗漏一些东西,但请指导我学习这个.

main.cpp中

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QHash<QString,Person> hash;
QString key="1";

Person p;
p.name = name;
p.number = an;

hash.insert(key,p); 

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

person.h

class Person
{
public:
    Person();
    Person(QString name,QString num);
    bool operator==(const Person & other) const; //== overloading to assign in QHash
    QString name,number;
};
Run Code Online (Sandbox Code Playgroud)

person.cpp

Person::Person()
{
}
Person::Person(QString name, QString num)
{
    this->name=name;
    this->number=num;
}
bool Person::operator==(const Person & other) const
{
    bool state;
    if (name == other.name )
        state = true;
    else
        state = false;

    return state;
}
Run Code Online (Sandbox Code Playgroud)

错误是: - 'qHash':17个重载中没有一个可以转换所有的参数类型.我知道我错过了什么.请指导我.

thu*_*uga 5

你需要全局qHash()功能.

除了作为可分配的数据类型之外,QHash的密钥类型还有其他要求:它必须提供operator ==(),并且类型的命名空间中还必须有一个qHash()函数,它返回键的类型参数的哈希值.

请参阅有关的更多信息.

  • @thuga没有prblm是qHash()不是全局的它在我的人类里面 (2认同)