19

在使用 LLVM 2.0 的 Xcode 中,当我将该行using namespace std;放入 C++ 代码中时,我收到以下警告:

语义问题
使用指令是指隐式定义的命名空间“std”

有没有办法来解决这个问题?为什么会发出这个警告?

4

4 回答 4

29

您是否包含任何标准头文件?否则编译器不知道namespace std.

请发布更多代码以澄清。

于 2010-10-17T06:51:58.503 回答
9

将 using namespace std 移到 #include 之后可以消除此警告。

于 2015-02-08T14:55:43.160 回答
7

我像这样解决了这个问题

#include <iostream>

using namespace std;
/// This function is used to ensure that a floating point number is
/// not a NaN or infinity.
inline bool b2IsValid(float32 x)
{
    if (x != x)
    {
        // NaN.
        return false;
    }
    float32 infinity = std::numeric_limits <float32>::infinity();
    return -infinity < x && x < infinity;
    return true;

}
于 2011-03-29T06:29:42.580 回答
-2

我看到这个问题已经很老了,但是对于将来检查这个问题的任何人,我想从 LLVM 文档中添加这个链接作为讨论的补充,并让人们寻找更多信息:

LLVM 编码标准:不要使用 using namespace std;

我相信这个标题很能说明我为什么分享它来帮助解决这个问题。

在 LLVM 中,我们更喜欢使用“std::”前缀显式地为标准命名空间中的所有标识符添加前缀,而不是依赖于“using namespace std;”。

在头文件中,添加“使用名称空间 XXX”指令会污染任何包含头文件的源文件的名称空间。这显然是一件坏事。

编辑:因此,如果使用“使用 std 命名空间;” 为您使用标准库的每种情况显式键入 std:: 。它避免了与源文件命名空间的冲突。这就是文章上面引用的建议。

于 2016-08-19T08:24:53.463 回答