UiQt自动生成的命名空间有什么意义?
这两个名称空间是否相同?
在第一个中,它包含MainWindow类的前向声明,ui_MainWindow.h为什么它没有声明为class Ui::MainWindow?编译器如何知道MainWindow来自自动生成的Ui头?
在MainWindow.h中
namespace Ui {
class MainWindow; //MainWindow from ui_MainWindow.h
}
Run Code Online (Sandbox Code Playgroud)
在ui_MainWindow.h中
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
Run Code Online (Sandbox Code Playgroud)
Qt自动生成的命名空间Ui的意义是什么?
这样它就驻留在自己的“气泡”中,并且不会与其他任何类似命名的类(如您明确创建的类)冲突。当然,他们可以使它被不同地调用,依此类推,但是即使那样,命名空间还是C ++中避免冲突的好习惯。
这两个名称空间是否相同?
是的,当然,在同一父名称空间中具有相同名称的名称空间在项目中始终是相同的。
我想我的意思是为什么在Ui_MainWindow.h中创建一个命名空间Ui。
好吧,真的会在其他地方创建它吗?需要有一些文件来生成此代码,而不用即时生成的代码污染任何现有的源文件。它是否正好被这样称呼,再次只是个人品味。
以及MainWindow.h中命名空间Ui中的MainWindow类如何知道它是Ui文件中MainWindow类的前向声明,而不是我创建的声明。
好吧,这与Qt无关,这只是C ++基础知识。在我看来,您不知道什么是名称空间以及如何使用它们。它将使用名称空间进行“标记”,因此编译器当然会知道它引用的是哪个。现在想象一下没有命名空间的情况。那时对于编译器来说将是完全模棱两可的。