【问题标题】:What is the difference between using "::std" or including "using namespace std" in the header?在标头中使用“::std”或包含“使用命名空间std”有什么区别?
【发布时间】:2015-10-28 00:11:09
【问题描述】:

我目前在类Return_Class 中定义了一个字符串ID,为此我需要使用“命名空间”。 (我在 Qt 工作。)

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

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

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

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

【问题讨论】:

  • QString 不在 std 命名空间中。另见stackoverflow.com/questions/1452721/…
  • 我建议你了解命名空间到底是什么。
  • 顺便说一句。它是“语法”,而不是“罪税”
  • @deviantfan 他只是想搞笑:)

标签: c++ qt namespaces


【解决方案1】:

您使用的是QString,而QString 不是来自std namespace。当你直接输入std::QString时会报错,因为QStringstd namespace中没有定义,但是当你输入using namespace std时,你可以使用std namespace中的所有内容而不用直接输入std(什么是在该命名空间中定义),但不是QString,因为QString 的定义不存在。

【讨论】:

    【解决方案2】:

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

    顺便说一句,你确定要使用static std::QString ID; 还是 static std::string ID;

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

    还有一点需要注意的是千万不要放

    using namespace std
    

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

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 2022-01-19
      • 2020-10-03
      • 2015-10-05
      相关资源
      最近更新 更多