C++ 错误:重载“abs(double)”的调用不明确
我一直在寻找答案,但找不到一个符合我的简单情况的答案 abs究竟为什么只对整数起作用?我不能做这个手术C++ 错误:重载“abs(double)”的调用不明确,c++,C++,我一直在寻找答案,但找不到一个符合我的简单情况的答案 abs究竟为什么只对整数起作用?我不能做这个手术 // Example program #include <iostream> using namespace std; int main() { float someVariable = abs(-4.22); cout << someVariable; } 注意,我正在使用来测试它。您需要包括数学库,如下所示: #include <cmat
// Example program
#include <iostream>
using namespace std;
int main()
{
float someVariable = abs(-4.22);
cout << someVariable;
}
注意,我正在使用来测试它。您需要包括数学库,如下所示:
#include <cmath>
您需要包括数学库,如下所示:
#include <cmath>
abs有不同的实现方式,具体取决于它是如何包含的 要获得浮点值,则需要
#include <cmath>
结果程序
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float someVariable = abs(-4.22);
cout << someVariable;
}
参考abs有不同的实现方式,具体取决于其包含方式 要获得浮点值,则需要
#include <cmath>
结果程序
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float someVariable = abs(-4.22);
cout << someVariable;
}
参考标准:abs采用以下任何一种:
长的
长长的
双重的
长双人
但是,在C++17之前,除非包含,否则只有前三个列出的整数重载可用。您正在传递一个浮点值,它可以很好地转换为任意三个浮点值,因此编译器无法判断您想要哪一个
如果您确实想要整数重载,您可以使用强制转换为int,long或long,视情况而定
但您不需要:您希望触发浮点重载,因此使用include将其引入范围,然后应该自动拾取它,因为您正在传递浮点
事实上,事实上,即使整数重载也是可用的,这让你很幸运,因为你从来没有包括在内;你的工具链一定是碰巧为你做的。始终根据文档包含正确的标题。std::abs采用以下任何一种:
长的
长长的
双重的
长双人
但是,在C++17之前,除非包含,否则只有前三个列出的整数重载可用。您正在传递一个浮点值,它可以很好地转换为任意三个浮点值,因此编译器无法判断您想要哪一个
如果您确实想要整数重载,您可以使用强制转换为int,long或long,视情况而定
但您不需要:您希望触发浮点重载,因此使用include将其引入范围,然后应该自动拾取它,因为您正在传递浮点
事实上,事实上,即使整数重载也是可用的,这让你很幸运,因为你从来没有包括在内;你的工具链一定是碰巧为你做的。始终根据文档包含正确的标题。abs在cmath标题中声明。因此,如果您想使用abs,您需要在代码中包含cmath,如下所示:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float someVariable = abs(-4.22);
cout << someVariable;
}
参考:abs在cmath标题中声明。因此,如果您想使用abs,您需要在代码中包含cmath,如下所示:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float someVariable = abs(-4.22);
cout << someVariable;
}
参考资料:啊,好吧,我必须把它包括进去,这样它才能工作。谢谢你的帮助。但我几乎可以肯定ABS可以用于实数,不,我在C中读到,但是C++是的!是的,正确@aName,看看我的更新,顺便说一句,你问了一个很好的问题,+1!我不认为你需要晶圆厂,如果你包括数学.h,根据,都应该声明相同的名称,只是在不同的名称。数学中的abs.h似乎对实数很好。这也是我在HolyBlackCat上的想法,但请看我的第一个现场演示。我包括在内。将晶圆厂更改为abs会导致错误!奇怪的是,在我的工作环境中,仅仅包括math.h和abs-4.22就可以了!!啊,好吧,我必须把它包括进去才能起作用。谢谢你的帮助。但我几乎可以肯定ABS可以用于实数,不,我在C中读到,但是C++是的!是的,正确@aName,看看我的更新,顺便说一句,你问了一个很好的问题,+1!我不认为你需要晶圆厂,如果你包括数学.h,根据,都应该声明相同的名称,只是在不同的名称。数学中的abs.h似乎对实数很好。这也是我在HolyBlackCat上的想法,但请看我的第一个现场演示。我包括在内。将晶圆厂更改为abs会导致错误!奇怪的是,在我的工作环境中,仅仅包括math.h和abs-4.22就可以了!!