我看到Qt像这样在Ui接口(interface)中放置了一个类:

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    ...

此方法是否与将整个类包含在 namespace 中相同?当然看起来更干净。

最佳答案

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

看哪:

namespace Ui {
    class MainWindow;
}

class MainWindow
{

};

int main()
{
    Ui::MainWindow mw; // fails due to incomplete type
}

由于Ui::MainWindow是不完整的类型,因此该代码无法编译。

Qt代码很可能只是使用前向声明。您可以在 namespace 中向前声明该类,但是实际上您仍然必须在相同的 namespace 中实现该类,否则它不是同一类。

09-30 14:02
查看更多