Мне сложно определить, как классы определены в Qt.Метод Qt возвращает объект без полного определения объекта
Возьму API QT5 JSON в качестве примера:
QJsonValue класс, представляющий любое значение в формате JSON. Он может быть преобразован в QJsonObject, QJsonArray, или стандартных типов, таких как QString, междунар и т.д.
Теперь заголовок QJsonValue выглядит следующим образом (я раздели, не соответствующие части, полный файл here):
#include <QtCore/qglobal.h>
#include <QtCore/qstring.h>
class QDebug;
class QVariant;
class QJsonArray;
class QJsonObject; // class is pre-declared
class Q_CORE_EXPORT QJsonValue
{
QJsonValue(const QJsonObject &o);
QJsonObject toObject() const; // how does this work without
// any info on QJsonObject class structure??
// ...
}
что меня беспокоит, что QJsonObject
предварительно объявлено как существующий класс, но я полагаю, что без какой-либо информации о колбах класса, метод toObject()
не будет компилировать (хотя это творит, в том числе только <QJsonValue>
не прерывается).
Я не уверен в ссылке на const, поскольку это может не потребоваться полное описание класса, а только адрес.
Проблема в том, что в любом месте файла не содержится QJsonObject.h.
Это волшебство или что?
Он включен в файл qjasonvalue.cpp. – thuga
Как компилятор знает только с файлом заголовка, сколько места для сохранения этого объекта QJsonObject в стеке? * Без какой-либо информации об этом ?? * В C, если вы ссылаетесь на структуру, не определяя ее целостность, она терпит неудачу, я прав? – Gui13
См. Http://stackoverflow.com/a/553796/492336 – sashoalm