C++ Qt:QMutex成员在派生的QList中<;XYZ>;,无法访问QMutex成员编译错误
我有一个派生的C++ Qt:QMutex成员在派生的QList中<;XYZ>;,无法访问QMutex成员编译错误,c++,qt4,C++,Qt4,我有一个派生的QList,其中有一个成员QMutex class WaypointList : public QList<Waypoint> { private: mutable QMutex _mutex; /*!< Mutex for thread safety */ .. } // HERE COMPILE ERROR, in this line 类航路点列表:公共QList{ 私人: 可变QMutex\u互斥体;/*!
QList
,其中有一个成员QMutex
class WaypointList : public QList<Waypoint> {
private:
mutable QMutex _mutex; /*!< Mutex for thread safety */
..
} // HERE COMPILE ERROR, in this line
类航路点列表:公共QList{
私人:
可变QMutex\u互斥体;/*!<用于线程安全的互斥体*/
..
}//此处编译错误,在此行中
编译时,我得到C2248:'QMutex::operator=':无法访问在类'QMutex'中声明的私有成员。
原因是QMutex
不可复制(Q\u DISABLE\u COPY
,)。这里是推荐的这是最好的方法吗?
备注:
Q\u对象
类中使用QMutex\u互斥时,它工作得很好。知道为什么我在这里得到错误而不是使用Q\u对象
类吗
Q_OBJECT
是一个宏,必须出现在类定义的私有部分,该类定义声明自己的信号和插槽,或者使用Qt的元对象系统()提供的其他服务。此宏要求类是QObject
的子类QObject
既没有复制构造函数,也没有赋值运算符()
对不起,如果我重复你知道的事情。我建议使用Q\u disable\u copy
宏显式禁用类的复制构造函数和赋值运算符:
class WaypointList : public QList<Waypoint> {
private:
Q_DISABLE_COPY(WaypointList)
mutable QMutex _mutex; /*!< Mutex for thread safety */
..
};
类航路点列表:公共QList{
私人:
Q_禁用_复制(航路点列表)
可变QMutex\u互斥体;/*!<用于线程安全的互斥体*/
..
};
希望,这会有所帮助。
Q_OBJECT
是一个宏,必须出现在类定义的私有部分,声明自己的信号和插槽,或者使用Qt的元对象系统()提供的其他服务。此宏要求类是QObject
的子类QObject
既没有复制构造函数,也没有赋值运算符()
对不起,如果我重复你知道的事情。我建议使用Q\u disable\u copy
宏显式禁用类的复制构造函数和赋值运算符:
class WaypointList : public QList<Waypoint> {
private:
Q_DISABLE_COPY(WaypointList)
mutable QMutex _mutex; /*!< Mutex for thread safety */
..
};
类航路点列表:公共QList{
私人:
Q_禁用_复制(航路点列表)
可变QMutex\u互斥体;/*!<用于线程安全的互斥体*/
..
};
希望,这会有所帮助。它与QObject没有问题的原因是QObject也是不可复制的,所以它不是问题 在您的情况下,正确的答案是定义您自己的复制和赋值操作符,以便它们复制/赋值列表,但对象有自己的互斥体。这样,它将按照您的预期运行。C++中没有关键字告诉编译器你想要这个行为,你必须自己去做。在这种情况下,由于它是一个互斥体,您可能希望正确使用互斥体以确保副本是原子的
另一个选择是在你的新课上禁用复制/赋值,但从你的问题来看,我不相信这是你想要做的。最后,如果您确实决定使用指向QMutex的指针,您可能需要创建自己的复制/分配操作符来正确处理原始指针,以防止泄漏。它与QObject没有问题的原因是QObject也是不可复制的,因此它不是问题 在您的情况下,正确的答案是定义您自己的复制和赋值操作符,以便它们复制/赋值列表,但对象有自己的互斥体。这样,它将按照您的预期运行。C++中没有关键字告诉编译器你想要这个行为,你必须自己去做。在这种情况下,由于它是一个互斥体,您可能希望正确使用互斥体以确保副本是原子的
另一个选择是在你的新课上禁用复制/赋值,但从你的问题来看,我不相信这是你想要做的。最后,如果您决定使用指向QMutex的指针,您可能需要创建自己的复制/分配运算符来正确处理原始指针,以防止泄漏。如果您做得对,我更希望保留“复制”,并在从不同线程复制和分配期间需要互斥。我用自己的操作符对它进行了一次尝试(然后我会回来:-)你说得对,我更喜欢保留“copy”,并且在复制和分配不同线程时需要互斥。我用自己的操作符对它进行了一次尝试(然后我会回来:-),这同样有效,但我坚持使用我可以复制的类的一个版本(=>实现的赋值操作符)。谢谢你的提示。这同样有效,但我坚持使用我可以复制的类的版本(=>已实现的赋值运算符)。谢谢你的提示。