2

クラスを作成し、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」の無効な使用

4

2 に答える 2

4

コンストラクターで使用する前に、myClassPrivate宣言を行う必要があります。ファイル内myClass:.cpp

class myClassPrivate
{
    // ...
};

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

コンセプトや Qt の便利なマクロなどを説明している Web 上のソースを確認することをお勧めしQ_DますQ_DECLARE_PRIVATE

  1. Qt プライベート クラスと D ポインターに関するブログ投稿
  2. D-ポインターの KDE Techbase
于 2013-08-16T10:02:29.337 に答える
3

私の別の答えを確認してください。開始点として使用できる良いサンプルがあります: qtプライベートクラスでの不完全な型の無効な使用

于 2013-08-16T10:03:59.523 に答える