使用" :: std"有什么区别?或者包括"使用命名空间std"在标题?

时间:2015-08-05 09:39:13

标签: c++ qt namespaces

我目前在类ID中定义一个字符串Return_Class,以便我可以使用" namespace。" (我在Qt工作。)

当我完全放置using namespace std;我的代码功能时,当我删除using namespace std;并将我的课程编辑为...

class Return_Class : public QString
{
public:
    static std::QString ID;
};

...我的代码收到错误消息"命名空间中的QString" std"没有命名类型"

我知道使用std ::被认为是更好的做法,但我很困惑为什么它不适用于我的情况?我的字符串语法错了吗?感谢

2 个答案:

答案 0 :(得分:1)

您使用的是QString,而QString并非来自std namespace。当您直接键入std::QString时,您会收到错误,因为QString中未定义std namespace,但当您输入using namespace std时,您可以使用std namespace中的所有内容不直接键入std(在该命名空间中定义的内容),而不是QString,因为QString的定义不存在。

答案 1 :(得分:0)

Qstring不是命名空间的一部分,因此您收到错误。

是的,你确定要使用static std::QString ID;吗? 还是 static std::string ID;

关于使用“:: std”或“using namespace std”之间的区别 使用“:: std”总是更好,因为如果你使用两个不同的命名空间,它们都有一个名为func()的函数。这将是模棱两可的。

还有一点需要注意的是,你永远不应该把

using namespace std

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