0

我很难弄清楚这些类是如何在 Qt 中定义的。

我将以 QT5 JSON API 为例:

QJsonValue 是一个代表任何 JSON 值的类。它可以转换为 QJsonObject、QJsonArray 或标准类型,如 QString、int 等。

现在,QJsonValue 标头看起来像这样(我去掉了不相关的部分,完整的文件在这里):

#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

这是魔法还是什么?

4

1 回答 1

2

仅当您定义函数时才需要包含头文件,但函数声明(即使是按值获取类型参数的函数声明)只需要前向声明。

于 2013-06-06T14:20:45.707 回答