如何在Qt中使d指针正确

如何在Qt中使d指针正确,qt,Qt,我创建了myClass类,为了隐藏成员,使用了d指针,但在编译源代码时出错。代码如下: 头文件: class myClassPrivate; class myClass : public QObject { Q_OBJECT public: myClass(QObject *parent = 0); ~myClass(); ... signals: public slots: private: myClassPrivate *d; }; 和相关的.

我创建了
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”的使用无效

myClass
构造函数中使用它之前,必须先将
myClassPrivate
声明放入。在
.cpp
文件中:

class myClassPrivate
{
    // ...
};

myClass::myClass(QObject *parent):
    QObject(parent),
    d(new myClassPrivate())
{
}
你可能想在网上查阅一些资料,解释这个概念和Qt的便利宏
Q\u D
Q\u DECLARE\u PRIVATE
等等:


  • 检查我的另一个答案,有很好的示例可以作为起点:

    好的,谢谢,我可以在myClassPrivate中创建析构函数以释放(m_文件),或者没有必要…是的,您可以而且应该创建一个
    ~myClassPrivate
    析构函数
    删除
    并删除
    QFile
    ——否则会泄漏内存!