将类放在名称空间中

wro*_*ame 4 c++ coding-style namespaces class

我看到Qt在Ui接口中放了一个类,如下所示:

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    ...
Run Code Online (Sandbox Code Playgroud)

此方法是否与将整个类封装在命名空间中相同?它当然看起来更清洁.

Cha*_*via 9

不,在您的示例中,Ui::MainWindowMainWindow与全局命名空间中定义的类不同的类.

看吧:

namespace Ui {
    class MainWindow;
}

class MainWindow
{

};

int main()
{
    Ui::MainWindow mw; // fails due to incomplete type
}
Run Code Online (Sandbox Code Playgroud)

此代码将无法编译,因为它Ui::MainWindow是一个不完整的类型.

最有可能的是,Qt代码只是使用了前向声明.您可以在命名空间中转发声明类,但您仍然必须在同一命名空间中实际实现该类,否则它不是同一个类.