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

时间:2013-11-06 06:04:21

标签: 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();
}

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

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

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

2 个答案:

答案 0 :(得分:5)

您需要全局qHash()功能。

  

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

有关详情,请参阅this

答案 1 :(得分:0)

您提供的代码不完整且无法编译 - 例如找不到符号名称,不包括。

将类用作值时,不需要op ==。值类的唯一要求 - 默认构造函数。

我认为你的问题不是别的。如果您提供了完整的代码和完整的错误列表,我可以告诉您究竟是什么。

您将在下面找到代码片段的工作版本。 (为简单起见,一个文件中的所有内容)

的main.cpp

#include <QApplication>
#include <QHash>
#include <QString>

class Person
{
public:
    Person(QString name=QString::null,QString num=QString::null);
    QString name,number;
};


Person::Person(QString _name, QString _num)
:name(_name),number(_num)
{   
}

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

    Person p("Orhan Kemal", "1914");

    hash.insert(key,p); 
        return a.exec();
}

此致 的Valentin

修改 初始化成员不在正文