Почему Qt включает пустые определения классов существующих классов в заголовочные файлы? - PullRequest
3 голосов
/ 20 июля 2009

Я читаю примеры на странице Qt и задаюсь вопросом, почему они добавляют ссылки на уже существующие классы в своем коде example :

#ifndef HTTPWINDOW_H
#define HTTPWINDOW_H

#include <QDialog>

class QFile;
class QHttp;
class QHttpResponseHeader;
class QLabel;
class QLineEdit;
class QProgressDialog;
class QPushButton;

class HttpWindow : public QDialog
{
...

Ответы [ 3 ]

10 голосов
/ 20 июля 2009

Это предварительные декларации. Их использование может (в некоторых случаях) устранить необходимость #include соответствующих заголовочных файлов, тем самым ускоряя компиляцию. Стандартная библиотека C ++ делает нечто похожее с заголовком <iosfwd>.

9 голосов
/ 20 июля 2009

Это называется Форвардная декларация

Вы можете обратиться к этому вопросу здесь , чтобы получить подробное представление о том, когда использовать предварительную декларацию

1 голос
/ 20 июля 2009

Как уже упоминалось выше, это просто предварительная декларация. А в заголовочном файле эти классы обычно будут использоваться через указатели, поэтому полное объявление класса не требуется до .cpp. Так, например, Ваш заголовок может продолжаться ...

class HttpWindow : public QDialog
{

QFile *m_pFile;
QHttp *m_pHttp;
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...