math.h 和 cmath 之间的冲突

Conflict between math.h and cmath?

本文关键字:冲突 之间 cmath math      更新时间:2023-10-16

由于"歧义",我在编译时遇到了麻烦。我有:

#include <cmath>
#include <math.h>
float q;
setActivacion(1/(1+pow(M_E,-q)));

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

倍战俘(双倍、双倍)浮子标准::p ow(浮子,浮子)

我尝试将直接十进制值插入 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::powusing ::pow(来自内存的语法,但希望你明白了)。