C++ Cmath.h 问题导致变量不在全局命名空间中
Posted
技术标签:
【中文标题】C++ Cmath.h 问题导致变量不在全局命名空间中【英文标题】:C++ Cmath.h issue leading to variables not being in theglobal namespace 【发布时间】:2020-01-20 18:06:01 【问题描述】:在 Visual Studio 中运行 C++ 时,我正在尝试编写一个简单的 Hello World 命令。但是,当我这样做时,我不断遇到这个问题。
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\math.h(1,1): warning C4821: Unable to determine Unicode encoding type, please save the file with signature (BOM)
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cstdlib(24,18): error C2039: 'fabs': is not a member of '`global namespace''
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cstdlib(24,22): error C3861: 'fabs': identifier not found
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cstdlib(28,18): error C2039: 'fabsf': is not a member of '`global namespace''
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cstdlib(28,23): error C3861: 'fabsf': identifier not found
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cstdlib(32,18): error C2039: 'fabsl': is not a member of '`global namespace''
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cstdlib(32,23): error C3861: 'fabsl': identifier not found
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cmath(26,47): warning C4244: 'argument': conversion from 'double' to 'int', possible loss of data
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cmath(30,18): error C2039: 'acosf': is not a member of '`global namespace''
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cmath(30,23): error C3861: 'acosf': identifier not found
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\cmath(34,18): error C2039: 'acoshf': is not a member of '`global namespace''
(etc)
#include <iostream>
int main()
std::cout << "Hello World!\n";
return 0;
问题似乎来自这些行的 cmath 头文件内部。
_NODISCARD _Check_return_ inline float acos(_In_ float _Xx) noexcept /* strengthened */
return _CSTD acosf(_Xx);
_NODISCARD _Check_return_ inline float acosh(_In_ float _Xx) noexcept /* strengthened */
return _CSTD acoshf(_Xx);
_NODISCARD _Check_return_ inline float asin(_In_ float _Xx) noexcept /* strengthened */
return _CSTD asinf(_Xx);
我应该注意,这些错误存在于 cmath 头文件的大部分中,而不仅仅是此处显示的错误,但我认为包含数百个错误没有用处。
这与 Visual Studio 依赖项有关吗?有什么办法可以避免这个错误?
我正在安装一个干净的 Visual Studio。
【问题讨论】:
你是不是偶然使用了预编译的头文件? 如果我是,我不是故意这样做的。如何检查我是否存在?对不起,我是新来使用视觉的。 右键项目,进入属性,C/C++,预编译头文件。第一行应该说“不使用预编译头” 我改变了,条目是空白的,但我把它改成了“不使用预编译头”。仍然遇到同样的问题。 好的,正在检查。有时预编译的头文件会导致问题。编译的时候,错误还在吗?错误Exxxx
是一个智能感知错误,并不总是真正的错误。编译器错误将以 C
开头
【参考方案1】:
在一阵痛苦之后,我发现了问题所在。基本上我的 math.h 文件已经损坏,只是发布了 NULLS。
我进入了 Windows 工具包中的 UCRT 文件,并从以前的发行版中复制了一个 math.h 文件。现在一切正常。
同样的技巧适用于进入您的项目属性并将您的 SDK 版本更改为与当前版本不同的版本。
【讨论】:
以上是关于C++ Cmath.h 问题导致变量不在全局命名空间中的主要内容,如果未能解决你的问题,请参考以下文章
C++中当未命名空间跟全局变量在一起的时候,怎么调用未命名空间里的变量