gpt4 book ai didi

c++ - 如何在 C++ 中处理 namespace ?

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:28 25 4
gpt4 key购买 nike

我在 QtDesigner 中创建了一个对话框

//---------- *.H
namespace Ui {
class MyDialog;
}

class MyDialog : public QDialog {
Q_OBJECT
public:
explicit MyDialog(QWidget* parent = 0);
~MyDialog();

private:
Ui::MyDialog* ui;
};

及其来源

// --------- *.CPP
MyDialog::MyDialog(QWidget* parent = 0) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
//..
}

我想在某个命名空间封装中构建它,这样我就有了 com::example::mydialogs::MyDialog ,例如:

//---------- *.H
namespace com {
namespace example {
namespace mydialogs {

namespace Ui {
class MyDialog;
}

class MyDialog : public QDialog {
Q_OBJECT
public:
explicit MyDialog(QWidget* parent = 0);
~MyDialog();

private:
Ui::MyDialog* ui;
};
}}} //namespace closing

及其来源

// --------- *.CPP
namespace com {
namespace example {
namespace mydialogs {

MyDialog::MyDialog(QWidget* parent = 0) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
//..
}
}}} //namespace closing

但是我的编译器用一条消息提示说:

C:\MyProjects\Test\com\example\mydialogs\MyDialog.h:29: Error: forward declaration of 'class com::example::mydialogs::Ui::MyDialog' class MyDialog;

命名空间 Ui 是由 Qt 自动添加的。如何正确使用命名空间结构?

最佳答案

为了转发声明一个命名空间,你需要使用下面的规范语法:

namespace ns1
{
namespace ns2
{
//....
namespace nsN
{
class a;
}
//....
}
}

以上代码片段摘自here .因此,在您的情况下,您需要关闭前向声明所在的 namespace 。

namespace com {
namespace example {
namespace mydialogs {

namespace Ui {
class MyDialog;
}

} // mydialogs
} // example
} // com

namespace com {
namespace example {
namespace mydialogs {

class MyDialog : public QDialog {
Q_OBJECT
public:
explicit MyDialog(QWidget* parent = 0);
~MyDialog();

private:
Ui::MyDialog* ui;
};
}}} //namespace closing

您的实现代码看起来是正确的。对头文件进行这些细微的更改,它应该可以编译。

我没有测试过这段代码。使用风险自负。

关于c++ - 如何在 C++ 中处理 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31410967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com