程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> qt-QMultiHash建立QMultiHash<key,t>時遇到問題

qt-QMultiHash建立QMultiHash<key,t>時遇到問題

編輯:編程綜合問答
QMultiHash建立QMultiHash<key,t>時遇到問題

請問建立一個 一對多的映射,使用了QMultiHash,全局的qHash怎麼寫?
重載了==運算符後,報錯,主要不會qHash,也不明白。
補充:我所寫的key和T都是兩個結構體。

使用insertMulti

 1>  main.cpp
1>d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(111): error C2665: “qHash”: 17 個重載中沒有一個可以轉換所有參數類型
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(63): 可能是“uint qHash(char,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(64): 或       “uint qHash(uchar,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(65): 或       “uint qHash(signed char,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(66): 或       “uint qHash(ushort,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(67): 或       “uint qHash(short,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(68): 或       “uint qHash(uint,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(69): 或       “uint qHash(int,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(70): 或       “uint qHash(ulong,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(78): 或       “uint qHash(long,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(79): 或       “uint qHash(quint64,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(87): 或       “uint qHash(qint64,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(88): 或       “uint qHash(QChar,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(89): 或       “uint qHash(const QByteArray &,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(90): 或       “uint qHash(const QString &,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(91): 或       “uint qHash(const QStringRef &,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(92): 或       “uint qHash(const QBitArray &,uint) throw()”
1>          d:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qhash.h(93): 或       “uint qHash(QLatin1String,uint) throw()”
.
.
.

最佳回答:


也許是我的問題不正確,我現在已經得到答案了,在自己構建QMultiHash的時候,ket和t是結構體時。需要給key重載==運算符,並設置全局的qHash函數供系統使用。
小例子以方便理解:
重載==函數就不寫了,主要就是對qHash這個全局函數進行重載,將結構體中的每個元素異或。

 typedef struct A_key
 {
            int a;
            char b;
            double c;
 }Akey;

 typedef struct A_t
 {
     int a;
 }At;
 QMultiHash<Akey, At> TwoStructHash;

 int qHash(const Akey& AkeyTemp)
 {
     return AkeyTemp.a ^ AkeyTemp.b ^ AkeyTemp.c;
 }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved