由于“歧义”,我无法编译。我有:
#include <cmath>
#include <math.h>
float q;
setActivacion(1/(1+pow(M_E,-q)));
编译器说:ISO C++ 说这些是模棱两可的,即使第一个的最差转换比第二个的最差转换要好:
双 pow(double, double) 浮点 std::pow(float, float)
我尝试将直接十进制值插入 pow() 的参数中并且它有效。只是似乎很难接受一个变量。
提前致谢。
由于“歧义”,我无法编译。我有:
#include <cmath>
#include <math.h>
float q;
setActivacion(1/(1+pow(M_E,-q)));
编译器说:ISO C++ 说这些是模棱两可的,即使第一个的最差转换比第二个的最差转换要好:
双 pow(double, double) 浮点 std::pow(float, float)
我尝试将直接十进制值插入 pow() 的参数中并且它有效。只是似乎很难接受一个变量。
提前致谢。
这是因为 C++ 标准库合并了 C 标准库 - math.h 和 cmath 应该是相同的,除了 cmath 将所有东西都放在std::
命名空间中。所以不要同时包含它们——如果你使用的是 C++,你可能应该#include <cmath>
只包含.
错误消息告诉您应该传入两个浮点数或两个双精度数。你正在传递一个双精度和一个浮点数。
尝试pow(M_E, static_cast<double>(-q))
对于它的价值,我无法从 g++ (4.5.3) 中得到这个错误。即使我只包含两个标题之一(并且不管哪个),我也可以从 Comeau 中得到类似的错误。
可能是 gcc 的实现有一些细节,这意味着只有一个匹配的pow
. 并且可能是在您的编译器上,仅包含一个标头或指定名称空间以pow
消除歧义。但是,依靠依赖于实现细节的修复通常不是一个好主意。
你可能using namespace std;
在某个地方有一个,不是吗?您还可以指定您想要的版本,即using std::pow
或using ::pow
(内存中的语法,但希望您能理解)。