2013-12-16 38 views
1

當我定義一個類使用哈希,遇到一些question.IDE顯示錯誤:的Qt 5.1 qHash錯誤

"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"

我覺得異常代碼是超載qHash(const的人&鍵)我。怎麼能處理呢? 我的QT是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; 
}; 

回答

2

爲您的類聲明qHash()超大。

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());  
} 
+0

Thanks.Declare qHash()在類外面,遇到其他錯誤。錯誤LNK2005:已在Listing1_22.obj中定義了「unsigned int __cdecl qHash(class Person const&)」(?qHash @@ YAIABVPerson @@@ Z)G:\ Code \ C++ \ QT \ FoundationOfQtDevelopment \ Chapter1_RecognizeQT \ main.obj – user2492798

+1

需要在cpp文件中移動qHash函數實現,就像任何其他函數一樣。 –