什么是前向声明
What is a forward declaration
我不明白带箭头的那条线到底是干什么的。 class 中是否包括 class?
#ifndef LINEEDIT_H
#define LINEEDIT_H
#include <QLineEdit>
class QToolButton; <--------------------------------------
class EnchancedLineEdit : public QLineEdit
{
Q_OBJECT
public:
EnchancedLineEdit(QWidget *parent = 0);
~EnchancedLineEdit();
protected:
void resizeEvent(QResizeEvent *);
private:
QToolButton *clearBtn;
private slots:
void updateCloseButton(const QString &text);
};
#endif // LINEEDIT_H
这一行
class QToolButton;
在当前(似乎是全局的)命名空间中声明 class QToolButton
,但没有定义 class 本身。即这个声明在作用域中引入了类型class QToolButton
。这个class用于classEnchancedLineEdit
的定义
private:
QToolButton *clearBtn;
其实有线就够了
private:
class QToolButton *clearBtn;
^^^^^
因为它还在当前命名空间中声明了classQToolButton
这些规格
class QToolButton;
和
class QToolButton
可能在此声明中使用的 class QToolButton *clearBtn;
称为详细类型名称。
在您显示数据成员声明的代码片段中
QToolButton *clearBtn;
不要求 QToolButton
类型是完整的,直到您访问 class QToolButton
.
的成员
那是classQToolButton
的前向声明(如果你google前向声明c++ 你会发现很多关于这个主题的好的搜索结果)
这允许将 class QToolButton
用于指针和引用,只要 QToolButton
的成员未在该特定头文件中访问。
前向声明的目的是加快编译速度。如果不使用前向声明,则需要包含 QToolButton
的头文件。
这意味着,每个包含 EnhancedLineEdit
的头文件的源文件也间接包含 QToolButton
的头文件,即使 class 没有在源文件本身中使用,这会减慢编译过程。
所以只有 EnhancedLineEdit
的源文件需要包含 <QToolButton>
。包含 EnhancedLineEdit
头文件的源文件不需要这样做,除非他们想直接使用 class QToolButton
本身。否则前向声明足以允许在 EnhancedLineEdit
.
的头文件中使用指向 QToolButton
的指针
我不明白带箭头的那条线到底是干什么的。 class 中是否包括 class?
#ifndef LINEEDIT_H
#define LINEEDIT_H
#include <QLineEdit>
class QToolButton; <--------------------------------------
class EnchancedLineEdit : public QLineEdit
{
Q_OBJECT
public:
EnchancedLineEdit(QWidget *parent = 0);
~EnchancedLineEdit();
protected:
void resizeEvent(QResizeEvent *);
private:
QToolButton *clearBtn;
private slots:
void updateCloseButton(const QString &text);
};
#endif // LINEEDIT_H
这一行
class QToolButton;
在当前(似乎是全局的)命名空间中声明 class QToolButton
,但没有定义 class 本身。即这个声明在作用域中引入了类型class QToolButton
。这个class用于classEnchancedLineEdit
private:
QToolButton *clearBtn;
其实有线就够了
private:
class QToolButton *clearBtn;
^^^^^
因为它还在当前命名空间中声明了classQToolButton
这些规格
class QToolButton;
和
class QToolButton
可能在此声明中使用的 class QToolButton *clearBtn;
称为详细类型名称。
在您显示数据成员声明的代码片段中
QToolButton *clearBtn;
不要求 QToolButton
类型是完整的,直到您访问 class QToolButton
.
那是classQToolButton
的前向声明(如果你google前向声明c++ 你会发现很多关于这个主题的好的搜索结果)
这允许将 class QToolButton
用于指针和引用,只要 QToolButton
的成员未在该特定头文件中访问。
前向声明的目的是加快编译速度。如果不使用前向声明,则需要包含 QToolButton
的头文件。
这意味着,每个包含 EnhancedLineEdit
的头文件的源文件也间接包含 QToolButton
的头文件,即使 class 没有在源文件本身中使用,这会减慢编译过程。
所以只有 EnhancedLineEdit
的源文件需要包含 <QToolButton>
。包含 EnhancedLineEdit
头文件的源文件不需要这样做,除非他们想直接使用 class QToolButton
本身。否则前向声明足以允许在 EnhancedLineEdit
.
QToolButton
的指针