【发布时间】:2016-12-05 14:42:21
【问题描述】:
我有一个类 Point 定义如下:
class Point
{
public:
inline Point() { m_x=0; m_y=0;}
protected:
int m_x;
int m_y;
};
Q_DECLARE_METATYPE(Point)
然后我想定义Point对象的自定义QList,因为我想用一些Point相关的方法来扩展基本方法,例如下面的hasX(int x):
class PointList : public QList<Point>
{
public:
inline PointList() {;}
inline PointList(const QList<Point>& points) : QList<PointList>(points){ ; }
bool hasX(int x) const {
for (const Point& p: *this)
if (p.x() == x)
return true;
return false;
}
};
如果我编译上面的代码,我会得到以下错误:
1>C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(111): error C2665: 'qHash' : none of the 25 overloads could convert all the argument types
1> c:\qt\qt5.7.0\5.7\msvc2013\include\qtcore\qdatetime.h(372): could be 'uint qHash(const QTime &,uint) throw()'
1> c:\qt\qt5.7.0\5.7\msvc2013\include\qtcore\qdatetime.h(371): or 'uint qHash(const QDate &,uint) throw()'
1> c:\qt\qt5.7.0\5.7\msvc2013\include\qtcore\qdatetime.h(370): or 'uint qHash(const QDateTime &,uint)'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qlocale.h(62): or 'uint qHash(const QLocale &,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qregexp.h(56): or 'uint qHash(const QRegExp &,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(101): or 'uint qHash(QLatin1String,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(100): or 'uint qHash(const QBitArray &,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(99): or 'uint qHash(const QStringRef &,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(98): or 'uint qHash(const QString &,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(97): or 'uint qHash(const QByteArray &,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(96): or 'uint qHash(const QChar,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(94): or 'uint qHash(long double,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(92): or 'uint qHash(double,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(91): or 'uint qHash(float,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(90): or 'uint qHash(qint64,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(86): or 'uint qHash(quint64,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(85): or 'uint qHash(long,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(79): or 'uint qHash(ulong,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(78): or 'uint qHash(int,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(77): or 'uint qHash(uint,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(76): or 'uint qHash(short,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(75): or 'uint qHash(ushort,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(74): or 'uint qHash(signed char,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(73): or 'uint qHash(uchar,uint) throw()'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhashfunctions.h(72): or 'uint qHash(char,uint) throw()'
1> while trying to match the argument list '(const Point)'
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhash.h(920) : see reference to function template instantiation 'uint qHash<Key>(const T &,uint)' being compiled
1> with
1> [
1> Key=Point
1> , T=Point
1> ]
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhash.h(916) : while compiling class template member function 'QHashNode<Key,T> **QHash<Key,T>::findNode(const Key &,uint *) const'
1> with
1> [
1> Key=Point
1> , T=QHashDummyValue
1> ]
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhash.h(760) : see reference to function template instantiation 'QHashNode<Key,T> **QHash<Key,T>::findNode(const Key &,uint *) const' being compiled
1> with
1> [
1> Key=Point
1> , T=QHashDummyValue
1> ]
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qhash.h(756) : while compiling class template member function 'QHash<T,QHashDummyValue>::iterator QHash<T,QHashDummyValue>::insert(const Key &,const QHashDummyValue &)'
1> with
1> [
1> T=Point
1> , Key=Point
1> ]
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qset.h(205) : see reference to function template instantiation 'QHash<T,QHashDummyValue>::iterator QHash<T,QHashDummyValue>::insert(const Key &,const QHashDummyValue &)' being compiled
1> with
1> [
1> T=Point
1> , Key=Point
1> ]
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qset.h(251) : see reference to class template instantiation 'QHash<T,QHashDummyValue>' being compiled
1> with
1> [
1> T=Point
1> ]
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qset.h(381) : see reference to class template instantiation 'QSet<T>' being compiled
1> with
1> [
1> T=Point
1> ]
1> C:\Qt\Qt5.7.0\5.7\msvc2013\include\QtCore/qset.h(381) : while compiling class template member function 'QSet<T> QList<T>::toSet(void) const'
1> with
1> [
1> T=Point
1> ]
1> c:\projects\points\point.h(139) : see reference to class template instantiation 'QList<Point>' being compiled
我错过了什么?
【问题讨论】:
-
我猜问题出在第二个构造函数上。该行应为
inline PointList(const QList<Point>& points) : QList<Point>(points){ ; }。该类不继承自 QList,但它继承了 QList 行是什么。但我不知道 c:\projects\points\point.h(139) -
第 139 行是:类 PointList : public QList
-
@JirkaPicek:即使我评论了该构造函数,我也会收到错误