我明白为什么我会得到C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'
.Qt 对象不可复制,如下所述:
- https://stackoverflow.com/a/3513395/356726
- 没有复制构造函数或赋值运算符
问题是,编译器消息总是指示类的最后一行(结束}
(:
class MyQObject : public QObject {
Q_OBJECT
....
}; <-- error line
根本原因是在其他地方,即复制类的位置(其他文件,代码中的一些不同行(。这有时很难发现!问题:有没有办法找到错误真正原因的行
备注:请注意,在标记此副本之前。问题是关于找到根本原因,而不是像其他问题那样如何解决它。
--- 编辑 1 ---
很好的提示库巴 et.al。它是VS2010,在Qt Creator 2.8.0中编译
'QObject::QObject'
C:Qt5.1.0-32qtbaseincludeQtCore/qobject.h(115) : see declaration of 'QObject'
This diagnostic occurred in the compiler generated function 'MyQObject ::MyQObject (const MyQObject &)'
我想知道为什么要生成复制构造函数。我想到的一个想法是,我正在使用启用DBus的Qt版本,这可能是原因吗?
检测根本原因的最简单解决方案是将复制 ctor 也设为私有。(或删除,但这在VS2010中还是不可能的(。这将禁止自动生成的复制 ctor,这是错误的根源。
如果您没有明确复制MyObject
但不断收到此错误消息,那么您与MyObject
一起使用的内容正在代表您进行复制。
最有可能的罪魁祸首是容器类之一,例如 QList
、QVector
等
有关详细信息,请阅读容器类文档以及您可能正在使用的任何容器的特定类文档。所有容器都有其元素的要求,例如必须具有默认构造函数,必须可分配等。这就是我认为你的问题所在。