我有一个派生QList<MyClass>
,其成员为QMutex
。
class WaypointList : public QList<Waypoint> {
private:
mutable QMutex _mutex; /*!< Mutex for thread safety */
..
} // HERE COMPILE ERROR, in this line
编译,我得到C2248: 'QMutex::operator =' : cannot access private member declared in class 'QMutex'
原因是QMutex
不可复制(Q_DISABLE_COPY
,related SO Question)。这里建议to make the member a pointer。 这是最好的方法吗?
说明:
QMutex _mutex
类中使用Q_OBJECT
时,它可以正常工作。知道为什么我在这里得到错误而不是Q_OBJECT
类?答案 0 :(得分:1)
Q_OBJECT
是一个宏,它必须出现在类定义的私有部分中,它声明自己的信号和插槽,或者使用Qt的元对象系统(here)提供的其他服务。此宏要求类是QObject
的子类。 QObject
既没有复制构造函数也没有赋值运算符(take a look here)。
对不起,如果我重复你知道的事情。我建议使用Q_DISABLE_COPY
宏禁用显式复制类的构造函数和赋值运算符:
class WaypointList : public QList<Waypoint> {
private:
Q_DISABLE_COPY(WaypointList)
mutable QMutex _mutex; /*!< Mutex for thread safety */
..
};
希望,这会有所帮助。