error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'全解

来源:互联网 发布:新域名在线估值 编辑:程序博客网 时间:2024/06/05 23:01

error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'全解

        今天写Qt程序,自定义了一个类Trigger继承自QObject。但是我在对实例化的类Trigger的对象进行赋值操作是,却报了错误:error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'。意思是我访问了私有成员。点击错误提示后,跳转到如下页面。

 

        在qobject.h中:

private:

Q_DISABLE_COPY(QObject)
Qt基类对象QObject通过宏 Q_DISABLE_COPY disable了缺省的copy constructor和operator=。这让我想起平时在写类的时候,我不想提供拷贝构造函数和赋值函数时,为了不让别人误用,就把这两个函数继承为私有的。那么它这里是为什么也要这么干呢?
 后来在网上搜索了下,得到如下结论,觉得很有道理:

【我们都知道Qt对标准C++增加了一些功能:signals, slots, object properties, events, event filters, string translation, timers,object trees, guarded pointers, dynamic cast.

 

       新加入的这些功能就要求我们把每一个QObject的对象看做是唯一(identities)的。唯一的意思就是不能通过拷贝或者赋值操作制作出一个一模一样的复制

  试想如果我们有一个QPushButton对象btnSubmit,如果我们可以复制出一个和btnSubmint完全一样的button对象,那么新的button对象的名字应该是什么?如果也叫btnSubmit,当我们给其中的btnSubmit接收事件或发出信号时,系统如何区分把事件由哪个button对象接收,或者哪个对象发送了信号?】
既然如此,那么该怎么用呢?
很简单,既然为了保证唯一性,不能进行赋值和拷贝。那我们就使用它的指针好了,这样赋值时传递的就不是这个类的对象了。
0 0
原创粉丝点击