如何在Qt中使d指针正确

时间:2013-08-16 09:53:31

标签: qt

我已经创建了myClass类,为了隐藏成员,使用了d-pointer但是在编译我的源代码时出错了。这是代码:

标题文件:

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'

2 个答案:

答案 0 :(得分:4)

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

class myClassPrivate
{
    // ...
};

myClass::myClass(QObject *parent):
    QObject(parent),
    d(new myClassPrivate())
{
}

您可能需要查看网络上的一些资料来解释概念和Qt的便利宏Q_DQ_DECLARE_PRIVATE等等:

  1. Blog post on Qt private classes and D-pointers
  2. KDE Techbase on D-Pointers

答案 1 :(得分:3)

检查我的另一个答案,有好的样本可以用作起点:Invalid use of incomplete type on qt private class