【发布时间】:2013-11-17 06:49:24
【问题描述】:
我是 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();
}
人.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 个重载中没有一个可以转换所有参数类型。我知道我错过了一些东西。请指导我。
【问题讨论】:
-
您使用的是哪个编译器和 QT 版本?这对我来说编译得很好。
-
对于自定义类型的键,您需要为该类型提供 qHash 函数。当你使用 QString 时,你应该没问题。
-
我正在使用 qt creator 2.7
-
另外,main 中的作业中的“name”和“an”是什么?它们没有在任何地方定义。
-
FWIW,你的
Person::operator==可以写成return (name == other.name)并且是一个很好的内联候选者,但也许你只是为了这个例子而减少了它。