2013-08-16 2 views
1

Я создал класс myClass и чтобы скрыть участников, использовал d-pointer, но получил ошибку при компиляции моего кода. Вот код:Как сделать d-указатель справа в Qt

Заголовок файла:

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'

ответ

3

Перед использованием его в конструкторе myClass вам нужно поставить объявление myClassPrivate. В .cpp файле:

class myClassPrivate 
{ 
    // ... 
}; 

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

Вы можете проверить некоторые источники в Интернете, объясняющие концепцию и удобство макросы Qt, Q_D, Q_DECLARE_PRIVATE и так далее:

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

Хорошо, спасибо, и я могу создать деструктор в myClassPrivate, чтобы освободить (m_File), или нет необходимости ... – elgolondrino

+0

Да, вы можете и * должны * создать ' ~ myClassPrivate' destructor 'delete'ing' QFile' - иначе вы будете утечка памяти! –

Смежные вопросы