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他只是想搞笑:)