我是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个重载中没有一个可以转换所有的参数类型。我知道我错过了什么。请指导我。
答案 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
修改强> 初始化成员不在正文