1

我明白为什么我得到一个C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'. Qt 对象不可复制,如下所述:

  1. https://stackoverflow.com/a/3513395/356726
  2. 没有复制构造函数或赋值运算符

问题是,编译器消息总是指示类的最后一行(关闭)}

class MyQObject : public QObject {
       Q_OBJECT
       ....
}; <-- error line

根本原因在其他地方,即。复制类的位置(其他文件,代码中的一些不同行)。这有时很难发现! 问题:有没有办法找到错误的真正原因所在的行

备注:请注意,在您标记此重复项之前。问题是关于找到根本原因,而不是像其他问题那样如何解决它。

--- 编辑 1 ---

很好的提示 Kuba et.al。这是VS2010,在Qt Creator 2.8.0中编译

'QObject::QObject'
        C:\Qt\5.1.0-32\qtbase\include\QtCore/qobject.h(115) : see declaration of 'QObject'
        This diagnostic occurred in the compiler generated function 'MyQObject ::MyQObject (const MyQObject &)'

我想知道为什么会生成一个复制构造函数。一个想法闪过我的脑海,我正在使用启用 DBus 的 Qt 版本,这可能是原因吗?

4

2 回答 2

1

检测根本原因的最简单解决方案是将您的复制 ctor 设为私有。(或已删除,但这在 VS2010 中尚不可能)。这将抑制自动生成的复制 ctor,这是错误的根源。

于 2013-10-09T12:07:06.827 回答
1

如果您没有明确复制您的MyObject,但您不断收到此错误消息,那么您与您一起使用的东西正在MyObject代表您进行复制。

最可能的罪魁祸首是容器类之一,例如QList,QVector等。

阅读Container 类文档以获取更多信息以及您可能正在使用的任何容器的特定类的文档。所有容器都有其元素的要求,例如必须有默认构造函数,必须是可分配的,等等。这就是我认为你的问题所在。

于 2013-10-09T12:31:36.007 回答