在使用 LLVM 2.0 的 Xcode 中,当我将该行using namespace std;
放入 C++ 代码中时,我收到以下警告:
语义问题
使用指令是指隐式定义的命名空间“std”
有没有办法来解决这个问题?为什么会发出这个警告?
在使用 LLVM 2.0 的 Xcode 中,当我将该行using namespace std;
放入 C++ 代码中时,我收到以下警告:
语义问题
使用指令是指隐式定义的命名空间“std”
有没有办法来解决这个问题?为什么会发出这个警告?
您是否包含任何标准头文件?否则编译器不知道namespace std
.
请发布更多代码以澄清。
将 using namespace std 移到 #include 之后可以消除此警告。
我像这样解决了这个问题
#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;
}
我看到这个问题已经很老了,但是对于将来检查这个问题的任何人,我想从 LLVM 文档中添加这个链接作为讨论的补充,并让人们寻找更多信息:
LLVM 编码标准:不要使用 using namespace std;
我相信这个标题很能说明我为什么分享它来帮助解决这个问题。
在 LLVM 中,我们更喜欢使用“std::”前缀显式地为标准命名空间中的所有标识符添加前缀,而不是依赖于“using namespace std;”。
在头文件中,添加“使用名称空间 XXX”指令会污染任何包含头文件的源文件的名称空间。这显然是一件坏事。
编辑:因此,如果使用“使用 std 命名空间;” 为您使用标准库的每种情况显式键入 std:: 。它避免了与源文件命名空间的冲突。这就是文章上面引用的建议。