错误:对重载函数的调用不明确

Error: ambiguous call to overloaded function

本文关键字:调用 不明确 函数 重载 错误      更新时间:2023-10-16
float App::fresnelReflectTerm(float etaPos, float etaNeg, float cos_theta_i)
{
float theta_i;
theta_i = acos(cos_theta_i);
    ...

这会生成一个"对重载函数错误的不明确调用",并说有四个选项:

float acos(float fValue)
double acos(double _X)
float acos(float _X)
long double acos(long double _X)    

我怀疑问题是第一个和第三个都采用浮点参数并返回浮点值。但是谁能给我一个提示,告诉我如何确定(我正在使用Visual Studio)这四个功能的来源,以便我可以消除重复,例如?或者也许只是给我一个关于如何解决这个问题的提示。

您可以在该函数上按 F12。

更新

根据OP的评论,问题是由于从G3D::引入的acos的定义。使用 std::acos 而不是 acos 将消除歧义。

您可以在 VS studio 中启用文件列表编译器选项,以便了解编译过程中包含哪些文件,请参阅此 msdn 文章。