cmath.h并编译错误

nbo*_*eel 11 compiler-errors cmath visual-studio visual-c++

我曾经没有任何问题地使用math.h.现在,我使用一个外部库,它本身有一个名为的文件math.h,但包括< cmath>.

将此库添加到我的项目中(甚至只是添加include目录,而不触及代码)现在会产生大量错误< cmath>:

C:\ Program Files\Microsoft Visual Studio 8\VC\include\cmath(18):错误C2039:'acosf':不是'`global namespace''的成员

C:\ Program Files\Microsoft Visual Studio 8\VC\include\cmath(18):错误C2873:'acosf':符号不能在using声明中使用

C:\ Program Files\Microsoft Visual Studio 8\VC\include\cmath(18):错误C2039:'asinf':不是'`global namespace''的成员

C:\ Program Files\Microsoft Visual Studio 8\VC\include\cmath(18):错误C2873:'asinf':符号不能在using声明中使用

[等等...]

我不明白为什么会这样.我正在使用Visual Studio 2005并在互联网上查看,似乎这个问题在VS 2008下得到了解决.但是,我想留在VS 2005 ...

包括using namespace std;无处不在,或改变我的包含顺序似乎没有任何改变.定义_STD_BEGIN解决了错误,但产生了多少< xlocinfo>.

怎么解决这个问题?

Kno*_*nox 13

VC 10中存在相同的问题.我认为,这<cmath>包括一个math.h但是正确的一个,它随VC一起提供,它使用在User-Project中创建的那个(当然具有不同的内容).

解决方案:永远不要使用math.h项目中命名的文件...(或者在某处更正std).

  • 经过2个小时撕掉我的头发后,你的评论让我觉得我的项目中有一个Math.h,即使与std的math.h有不同的大小写冲突.重命名为Math.h到MathExtensions.h解决了这个问题.谢谢! (2认同)

Ale*_*min 6

我不确定我是否正确阅读了您的问题,但图书馆会发布自己的 math.h 文件似乎很奇怪。

也许你想把父目录放在你的包含路径中,这样就<my_lib/math.h>可以在不与编译器冲突的情况下被包含<math.h>