Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “使用”与“使用”之间有什么区别:std“;或包括「;使用名称空间std";在标题中?_C++_Qt_Namespaces - Fatal编程技术网

C++ “使用”与“使用”之间有什么区别:std“;或包括「;使用名称空间std";在标题中?

C++ “使用”与“使用”之间有什么区别:std“;或包括「;使用名称空间std";在标题中?,c++,qt,namespaces,C++,Qt,Namespaces,我目前在一个类中定义了一个字符串ID,Return\u class,要使其工作,我需要使用“namespace”。(我在Qt中工作。) 当我使用名称空间std放置时我的代码功能完美,但是当我使用名称空间std删除时并将我的类编辑为 class Return_Class : public QString { public: static std::QString ID; }; …我的代码收到错误消息“命名空间中的QString”std“未命名类型” 我知道使用std::被认为是更好的做法

我目前在一个类中定义了一个字符串
ID
Return\u class
,要使其工作,我需要使用“namespace”。(我在Qt中工作。)

当我使用名称空间std放置
我的代码功能完美,但是当我使用名称空间std删除
并将我的类编辑为

class Return_Class : public QString
{
public:
    static std::QString ID;
};
…我的代码收到错误消息“命名空间中的QString”std“未命名类型”


我知道使用std::被认为是更好的做法,但我不明白为什么在我的情况下它不起作用?我的字符串语法是否错误?谢谢

您正在使用
QString
,并且
QString
不是来自
std namespace
。当您直接键入
std::QString
时,您将得到一个错误,因为
QString
未在
std命名空间中定义,但当您使用命名空间std
键入
时,您可以使用
std命名空间中的所有内容,而无需直接键入
std
(该命名空间中定义了什么),但不是
QString
,因为
QString
的定义不存在。

QString不是名称空间的一部分,因此您会得到错误

顺便问一下,您确定要使用
static std::QString ID
或者它是静态std::string ID

关于使用“::std”或“使用命名空间std”之间的区别 最好使用“::std”,因为如果您使用两个不同的名称空间,并且它们都有一个名为
func()
的函数,该怎么办。这将是模棱两可的

还有一件事需要注意的是,你不应该把

using namespace std

在头文件中,因为它可以传播到包含该头文件的所有文件,即使它们不想使用该命名空间。

QString
不在
std
命名空间中。另请参阅,我建议您了解名称空间实际上是什么。这是“语法”,而不是“罪恶税”@deviantfan他只是想搞笑:)