Qt:QMutex成员派生QList <xyz>,无法访问QMutex成员编译错误</xyz>

时间:2012-09-17 12:45:08

标签: c++ qt4

我有一个派生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_COPYrelated SO Question)。这里建议to make the member a pointer这是最好的方法吗?

说明:

  1. 当我在派生的QMutex _mutex类中使用Q_OBJECT时,它可以正常工作。知道为什么我在这里得到错误而不是Q_OBJECT类?
  2. 在其他语言中,我将该成员声明为瞬态。实际上我想要复制它。是否有声明忽略它?
  3. 或者正在编写一个赋值/复制运算符更好的方法?

1 个答案:

答案 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 */
    ..
};

希望,这会有所帮助。