1

When I define a class to use hash,encounter some question.IDE show error:

"error C2665: “qHash”: 17 overloads can not convert all parameter types D:\Qt\Qt5.1.1_x86\5.1.1\msvc2012\include\QtCore\qhash.h 111 1"

I think exception code is overload qHash(const Person &key).How can i deal? My QT is 5.1.

class Person
{
public:
    Person(const QString& name,const QString& number);

    const QString& name() const;
    const QString& number() const;

    inline bool operator==(const Person &compare) const
    {
        return (name()==compare.name())&&(number()==compare.number());        
    }  

    uint qHash(const Person &key)
    {
        return qt_hash(key.name())^qt_hash(key.number());       
    }

private:
    QString m_name,m_number;
};
demonplus
  • 5,613
  • 12
  • 49
  • 68
user2492798
  • 589
  • 1
  • 4
  • 8

1 Answers1

2

Declare qHash() for your class outsize.

class Person
{
public:
    Person(const QString& name,const QString& number);

    const QString& name() const;
    const QString& number() const;

    inline bool operator==(const Person &compare) const
    {
        return (name()==compare.name())&&(number()==compare.number());        
    }  
private:
    QString m_name,m_number;
};

uint qHash(const Person &key)
{
    return qt_hash(key.name())^qt_hash(key.number());       
}
PSyton
  • 908
  • 11
  • 18
  • Thanks.Declare qHash() in class outside,encounter other error. error LNK2005: "unsigned int __cdecl qHash(class Person const &)" (?qHash@@YAIABVPerson@@@Z) has defined in Listing1_22.obj G:\Code\C++\QT\FoundationOfQtDevelopment\Chapter1_RecognizeQT\main.obj – user2492798 Dec 16 '13 at 09:25
  • 1
    You need to move qHash function implementation in the cpp file, just like any other function. – Pavel Strakhov Dec 16 '13 at 11:57