Holla,在 QtCreator 自动生成的 Qt 5 项目文件中,在两个单独的 header 中声明了一个名为 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);
}
我想知道命名空间会发生什么?它是否合并,为什么这不被视为 Class MainWindow 的重新定义? 提前致谢。
感谢您的回答,我找到了这个 article关于 header 包括
最佳答案
合并。
第一个
class MainWindow;
是一个前向声明,它非常有意;它用于告诉编译器“有一个这样命名的类,稍后我将定义它”。它很有用,因为前向声明允许您在没有完整的类定义的情况下声明指针和引用,从而允许您打破类之间的依赖循环,并在不需要时保留要包含的 header 。前向声明稍后(可选)由通常的完整类定义替换。
关于c++ - 在两个不同的头文件中声明相同的命名空间,然后将它们包含在一个 cpp 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081132/