math.h和cmath之间的冲突?

时间:2012-09-15 10:07:24

标签: c++

由于“含糊不清”,我无法编译。 我有:

#include <cmath>
#include <math.h>

float q;
setActivacion(1/(1+pow(M_E,-q)));

编译说: ISO C ++表示这些是模糊的,即使第一个的最差转换比第二个的最差转换要好:

双动力(双,双) float std :: pow(float,float)

我已经尝试将直接十进制值插入pow()的参数中并且它可以工作。它似乎在修改变量时遇到了麻烦。

提前致谢。

3 个答案:

答案 0 :(得分:2)

那是因为C ++标准库包含了C标准库 - math.h和cmath应该是相同的,除了cmath将所有内容放在std::命名空间中。所以不要同时包含它们 - 如果你使用的是C ++,你可能只应该#include <cmath>

答案 1 :(得分:1)

错误消息告诉您应该传入两个浮点数或两个双精度数。你正在传递一个双重和一个浮动。

尝试pow(M_E, static_cast<double>(-q))

对于它的价值,我不能从g ++(4.5.3)中得到这个错误。我可以从Comeau中得到类似的错误,即使我只包含两个标题中的一个(不管是哪个)。

可能有gcc实现的一些细节,这意味着pow只有一个匹配版本。并且可能在您的编译器上,仅包括其中一个标头或指定pow的命名空间也消除了歧义。但依赖于实施细节的修复通常不是一个好主意。

答案 2 :(得分:0)

你可能在那里有一个using namespace std;,不是吗?您还可以指定所需的版本,即using std::powusing ::pow(来自内存的语法,但希望您明白这一点。)

相关问题