当前位置: 首页 > 知识库问答 >
问题:

了解Qt命名空间向前声明[重复]

姚伟
2023-03-14

所以我对Qt和C++都是新手,但我想弄清楚下面的代码是怎么回事。

我有一个头文件和源文件charinfowindow。在我拥有的源文件中:

using namespace std

在头文件中

namespace Ui {
    class CharInfoWindow;
}

我试着找出这些代码在网上做什么,但我只是在找关于如何做的资源。

如果有人能告诉我,首先,这些代码是做什么的,其次,他们为什么这样做。不胜感激。

谢谢

共有2个答案

孟增
2023-03-14

“使用命名空间std”意味着在此源文件中,使用来自此命名空间的类型时不必使用std::前缀(例如,可以编写string而不是std::string)。

头文件中的“class xxx;”是类xxx的“向前声明”。它告诉编译器“存在一个类xxx”,这样它就可以依靠它了。但是,类的定义在别处(在另一个头文件中)。

边永贞
2023-03-14

不管怎么说,使用namespace std被认为是一种糟糕的做法。如果您不想一直说std::cout,您可以:

使用STD::COUT;使用STD::ENDL;

等。这意味着你不会把整个世界都拉进范围。

但简而言之:

使用命名空间标准;

这意味着您不必像没有std::那样将其放在所有东西前面。

另一半--forward声明--它只是将类放在给定的名称空间中,而不使整个include文件变得很大:

namespace UI {
... everything
}
 类似资料:
  • 我有困难建立一个有3个类的结构。我不确定包含/转发声明。 下面的代码一直在编译,直到我在inclino.h中添加名称空间和枚举。我从Inclinomeasure.h收到“Inclino尚未声明”。 倾斜度。h 倾斜度 倾角读数.h 结构正确吗?如何访问其他类中的枚举? 提前道谢。 编辑:我修复了名称空间的问题,把它放在一个新的文件,包括由3类。但我似乎误用了include/forward声明。

  • 如何在命名空间中转发声明类。例如,下面是一个库的头文件,用户不需要知道私有的myPtr,所以当包含在头文件下面时,不需要包含boost头文件。那么我如何向前声明boost::shared_ptr以启用用户代码编译呢? MyClass.h

  • 这是一个非常基本的问题,但实际上我从来没有自己定义过名称空间。我正在尝试将我的基于Qt的库中的类分组在各种名称空间中(并且还允许更容易的扩展而不发生名称冲突)。例如,主类(也表示库)属于顶级命名空间: 这个使用了一组其他名称空间和类,这些名称空间和类是在的头文件中定义的,这些头文件包含在的头文件中: 其中Manager.h包含 和configurator.h包含 类的内容在这里并不重要。 在编译时

  • 我对C++不是很熟悉,这是我第一次使用的不仅仅是名称空间std。下面的有什么区别? VS 在这两个之后,我现在似乎可以创建一个MyClass对象了。一种方式比另一种好吗?另外,如果我都不这样做,我还可以通过每次需要时在MyNamespace::MyClass之前附加MyClass来引用MyClass吗? 接下来,如果我使用第二个选项转发declare,我还需要吗?在我(不是很好)的理解中,在C++

  • 在调用axis2 1.7.5(Wsdl2Java)生成的存根时,有人知道如何解决以下问题吗? 我发现存根发送了以下请求,但没有添加/定义SOAP版本(xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/)这是问题的根源 因此,我尝试如下设置SoapVersionURL 甚至可以直接将存根中的名称空间设置为 但是,这两种方法仍然忽略“xml

  • 如果我删除所有命名空间和前缀,我的XSLT转换将完美运行。 我曾尝试过几次引入名称空间,但最终总是出现某种错误或没有输出,因此我在这里寻求一些帮助和理解。 我的预期输出,缩减为命名空间和前缀,是: 再次缩减的XML输入是: 为了实现正确的命名空间转换,我需要向XSLT头中添加什么?