什么是前瞻性声明

时间:2015-07-08 18:07:38

标签: c++ class include

我不明白带箭头的线条到底在做什么。是否包括该课程中的那个班级?

Food.all.sample

2 个答案:

答案 0 :(得分:2)

这是类QToolButton前向声明(如果你google 转发声明c ++ ,你会发现很多关于这个主题的好搜索结果)< / p>

这允许对指针和引用使用类QToolButton,只要{E}不会在该特定的头文件中访问QToolButton的成员。

前向声明的目的是加快编译速度。如果您不使用前向声明,则需要包含QToolButton的头文件。 这意味着,包含EnhancedLineEdit的头文件的每个源文件也间接包含QToolButton的头文件,即使该类未在源文件本身中使用,这将减慢编译过程。

因此,只有EnhancedLineEdit的源文件需要包含<QToolButton>。包含EnhancedLineEdit头文件的源文件不需要这样做,除非他们想直接使用类QToolButton。否则,前向声明足以允许在QToolButton的头文件中使用指向EnhancedLineEdit的指针。

答案 1 :(得分:1)

这一行

class QToolButton;

在当前(似乎是全局的)命名空间中声明类QToolButton,而不定义类本身。也就是说,此声明在范围中引入了类型class QToolButton。该类用于类EnchancedLineEdit

的定义
private:
    QToolButton *clearBtn;

事实上,行

就足够了
private:
    class QToolButton *clearBtn;
    ^^^^^

因为它还在当前命名空间中声明了类QToolButton

这些规格

class QToolButton;

class QToolButton
可能在此声明class QToolButton *clearBtn;中使用的

称为详细类型名称。

在代码段中,您展示了数据成员声明

QToolButton *clearBtn;
在您访问QToolButton的成员之前,

不要求class QToolButton类型完整。