【发布时间】:2011-04-28 08:42:46
【问题描述】:
我曾经使用 math.h 没有任何问题。现在,我使用一个外部库,它本身有一个名为math.h 的文件,但其中包含< cmath>。
将这个库添加到我的项目(或者甚至只是添加包含目录,而不接触代码)现在会从 < cmath> 生成大量错误:
C:\Program Files\Microsoft Visual Studio 8\VC\include\cmath(18) : 错误 C2039: 'acosf' : is not a member of '`global namespace''
C:\Program Files\Microsoft Visual Studio 8\VC\include\cmath(18) : error C2873: 'acosf' : symbol cannot be used in a using-declaration
C:\Program Files\Microsoft Visual Studio 8\VC\include\cmath(18) : 错误 C2039: 'asinf' : is not a member of '`global namespace''
C:\Program Files\Microsoft Visual Studio 8\VC\include\cmath(18) : error C2873: 'asinf' : symbol cannot be used in a using-declaration
[等等,等等……]
我不明白为什么会这样。我正在使用 Visual Studio 2005 并在互联网上查找,似乎在 VS 2008 下解决了这个问题。但是,我想留在 VS 2005...
在任何地方都包含using namespace std;,或者更改我包含的顺序似乎并没有改变任何东西。定义_STD_BEGIN 解决了错误,但在< xlocinfo> 中产生了同样多的错误。
如何解决?
【问题讨论】:
-
cmath 应该在 C++ 代码中使用。您是否包含 C 文件中的此标头?
-
确实,我的项目中的一个文件是在 C 中并包含在 extern "C" 中。它包括“math.h”,然后可以在我的外部库的包含目录中找到它,并且隐含地包含 cmath - 因此我不知道如何解决这个问题。然而,这些编译错误似乎发生在我的代码中更早的地方,在编译这段 C 代码之前。
-
将这段特定的 C 代码更改为 C++ 似乎并没有改变 cmath 的所有编译错误...
-
我不确定我是否正确阅读了您的帖子,但库会发送它自己的 math.h 文件似乎很奇怪。也许您应该将父目录放在您的包含路径中,以便您可以
#include <my_lib/math.h>并避免与您的编译器math.h发生冲突? -
亚历山大:当然!我没有意识到他们所有的头文件都有一个“my_lib/myheader.h”形式的相对路径!非常感谢,这很有道理!
标签: visual-studio visual-c++ compiler-errors cmath