我有一个函数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);