1

由于“歧义”,我无法编译。我有:

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

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

编译器说:ISO C++ 说这些是模棱两可的,即使第一个的最差转换比第二个的最差转换要好:

双 pow(double, double) 浮点 std::pow(float, float)

我尝试将直接十进制值插入 pow() 的参数中并且它有效。只是似乎很难接受一个变量。

提前致谢。

4

3 回答 3

2

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

于 2012-09-15T10:10:02.687 回答
1

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

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

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

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

于 2012-09-15T10:32:13.450 回答
0

你可能using namespace std;在某个地方有一个,不是吗?您还可以指定您想要的版本,即using std::powusing ::pow(内存中的语法,但希望您能理解)。

于 2012-09-15T10:10:17.217 回答