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

标签 c++ qt namespaces forward-declaration

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 包括

最佳答案

  1. 合并。

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

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

关于c++ - 在两个不同的头文件中声明相同的命名空间,然后将它们包含在一个 cpp 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081132/

相关文章:

c++ - qbs dylib : library not loaded, 找不到图像

hadoop - Hadoop中的命名空间和元数据之间的区别?

C++ 如何绑定(bind)和调用模板化类型方法

c++ - 当范围变化时,复杂性是多少?

c++ - 在 vim 中保留 C++ 注释中的缩进

c++ - 如何隐藏包含Qt头文件的智能警告

C++/(Qt) 指向具有特定方法的任何对象的指针

C++ setw 无法按照我需要的方式工作

ruby - 在 Ruby 中命名命名空间的首选方式(更好的风格)是什么?单数还是复数?

node.js - 使用 typescript 2 使用 sequelize 模型扩展 express 请求对象