"Call of overloaded function is ambiguous"即使使用不同的参数顺序



我有一个函数fun(),我希望在同一范围内重载。根据重载规则,不同顺序的参数应该允许重载这里提到的函数。

代码:

#include "iostream"
using namespace std;
void fun(int i, float j)
{
cout << "int,float";
}
void fun(float i, int j)
{
cout << "float,int";
}
int main()
{
fun(20,20);
}

错误:

error: call of overloaded ‘fun(int, int)’ is ambiguous
15 |         fun(20,20);

问题:

如果只有一个函数的参数fun(int,float(,那么这将被称为最佳匹配,那么为什么在这种情况下它会抛出错误呢。

您给出了两个整数,因此编译器必须将其中一个转换为浮点,但应该使用哪个函数?

int main()
{
fun(20.0,20);
fun( 20, 20.0);
}

这些调用会让编译器感到高兴,因为您可以判断应该使用哪个函数。

您面临此错误的原因是由于您提供的参数的数据类型在这种情况下,

fun(20,20);

它们都是int、int。

在这种情况下,正确的函数调用是

fun(20,20.0);

fun(20.0,20);

(编辑(如Ivan Vnucec所述最好显式调用参数为float而不是double的函数所以这样称呼它:

fun(20,20.0f);

fun(20.0f,20);

相关内容

  • 没有找到相关文章

最新更新