如何在 Qt 中正确设置 d 指针
Posted
技术标签:
【中文标题】如何在 Qt 中正确设置 d 指针【英文标题】:How to make d-pointer right in Qt 【发布时间】:2013-08-16 09:53:31 【问题描述】:我创建了myClass
类,为了隐藏成员,使用了 d 指针,但在编译我的源代码时出错。代码如下:
头文件:
class myClassPrivate;
class myClass : public QObject
Q_OBJECT
public:
myClass(QObject *parent = 0);
~myClass();
...
signals:
public slots:
private:
myClassPrivate *d;
;
及相关的.cpp
myClass::myClass(QObject *parent):
QObject(parent),
d(new myClassPrivate())
myClass::~myClass()
delete d;
class myClassPrivate
public:
myClassPrivate();
...some methods...
QTextStream stream;
QFile* m_File;
;
myClassPrivate::myClassPrivate():
m_File(new QFile)
它说:'struct myClassPrivate'的前向声明; 不完整类型'myClassPrivate'的无效使用
【问题讨论】:
【参考方案1】:在myClass
构造函数中使用它之前,您必须先放置您的myClassPrivate
声明。在.cpp
文件中:
class myClassPrivate
// ...
;
myClass::myClass(QObject *parent):
QObject(parent),
d(new myClassPrivate())
您可能想查看网络上的一些资源来解释这个概念和 Qt 的便利宏 Q_D
、Q_DECLARE_PRIVATE
等等:
-
Blog post on Qt private classes and D-pointers
KDE Techbase on D-Pointers
【讨论】:
好吧,谢谢你,我可以在myClassPrivate中创建析构函数以释放(m_File),否则没有必要...... 是的,你可以并且应该创建一个~myClassPrivate
析构函数delete
ingQFile
——否则你会泄漏内存!【参考方案2】:
查看我的另一个答案,有很好的示例可以作为起点:Invalid use of incomplete type on qt private class
【讨论】:
以上是关于如何在 Qt 中正确设置 d 指针的主要内容,如果未能解决你的问题,请参考以下文章