首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmath.h和编译错误

cmath.h和编译错误
EN

Stack Overflow用户
提问于 2010-10-21 00:51:39
回答 4查看 18.6K关注 0票数 12

我以前和数学一起工作,没有任何问题。现在,我使用了一个外部库,它本身有一个名为math.h的文件,但它包含< cmath>

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

C:\Program \Microsoft 8\VC\include\cmath(18):错误C2039:'acosf‘:不是“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) : error C2039: 'asinf' : is not a member of '全局命名空间”的成员

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

等等等等..。

我不明白为什么会这样。我正在使用Visual 2005,从互联网上看,这个问题似乎是在VS 2008下解决的。不过,我想留在2005年.

包括using namespace std;无处不在,或者更改Including的顺序似乎并没有改变任何事情。定义_STD_BEGIN可以解决错误,但在< xlocinfo>中产生的数量也一样多。

如何解决这一问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-21 01:18:07

我不确定我是否正确地读到了你的问题,但是一个图书馆会把它自己的math.h文件发送出去似乎很奇怪。

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

票数 6
EN

Stack Overflow用户

发布于 2011-11-15 00:58:40

在VC 10中也存在同样的问题,我认为<cmath>本身包含了一个math.h,但是它包含了一个正确的math.h,它使用的是在User中创建的(当然,内容不同)。

解决方案:不要在项目中使用名为math.h的文件.(或在某个地方更正性病)。

票数 15
EN

Stack Overflow用户

发布于 2013-02-06 12:25:01

问题可能是将C库与C++约定混合在一起。例如:

代码语言:javascript
复制
#include <math.h>
namespace TEST {
}

这可以很好地编译,而:

代码语言:javascript
复制
namespace TEST {
  #include <math.h>
}

这会产生大量的虚假错误。

只是为了混淆这个问题:

代码语言:javascript
复制
#include <math.h>
namespace TEST {
  #include <math.h>
}

这也可以编译,因为它只能包含一次(第一次)。

因此,还:

代码语言:javascript
复制
#include <math.h>
namespace TEST {
  #include "SomethingThatIncludesMath.h"
}

将起作用,而:

代码语言:javascript
复制
namespace TEST {
  #include "SomethingThatIncludesMath.h"
}

不会的。

通过将C++头包含到*.c文件中,而不是*.cpp文件中,您也会遇到类似的问题。

我相信其他类似的混合C和C++会导致类似的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3983482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档