Sha*_*tef 6 c++ qt namespaces forward-declaration
Holla ,在 QtCreator 自动生成的 Qt 5 项目文件中,在两个单独的头文件中声明了一个名为 Ui 的命名空间,它们都包含在一个 cpp 文件中
//mainwindow.h
namespace Ui {
class MainWindow;
}
//ui_mainwindow.h
namespace Ui {
class MainWindow: public Ui_MainWindow {};
int x;
}
//mainwindow.cpp
#include "ui_mainwindow.h"
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
Run Code Online (Sandbox Code Playgroud)
我想知道命名空间会发生什么?它是否合并,为什么这不被视为类 MainWindow 的重新定义?提前致谢。
它被合并了。
第一个class MainWindow;
是前瞻性声明,这是非常有意的;它用于告诉编译器“有一个这样命名的类,稍后我会定义它”。
这是很有用的,因为前向声明允许您在没有完整类定义的情况下声明指针和引用,从而允许您打破类之间的依赖循环,并在不需要时保留要包含的头文件。前向声明稍后(可选)由通常的完整类定义替换。