在两个不同的头文件中声明相同的命名空间,然后将它们包含在一个 cpp 中

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 的重新定义?提前致谢。

感谢您的回答,我找到了 这篇关于标题的文章,包括

Mat*_*lia 6

  1. 它被合并了。

  2. 第一个class MainWindow;前瞻性声明,这是非常有意的;它用于告诉编译器“有一个这样命名的类,稍后我会定义它”。

    这是很有用的,因为前向声明允许您在没有完整类定义的情况下声明指针和引用,从而允许您打破类之间的依赖循环,并在不需要时保留要包含的头文件。前向声明稍后(可选)由通常的完整类定义替换。