我使用的实参是double类型,却同时匹配上了int和float类型的形参。
导致主函数报错“有多个重载函数“Add”实例与参数列表匹配”。
#include<iostream>
using namespace std;
int Add(int a, int b)
{
return a + b;
}
float Add(float a, float b)
{
return a + b;
}
int main()
{
cout << Add(1.2, 4.5) << endl;
return 0;
}
报错具体内容为:
有多个 重载函数“Add”实例与参数列表匹配:
函数“Add(int a,int b)"(已声明 所在行数:4)
函数“Add(float a,float b)"(已声明 所在行数:9)
参数类型为: (double,double)
我知道c++中,浮点型常数的默认类型是double类型。
所以输入的实参无法进行精确匹配,需要进行转换。
但是根据重载决议,“小数转换”应该优先于“整数和小数转换”才对
所以double->float应该优先于double->int才对
但却同时发生了,同时匹配了float和int。
我对实参进行强制类型转换,或者将float类型的函数重载修改为double
double Add(double a, double b)//将float类型的函数重载修改为double
{
return a + b;
}
int main()
{
cout << Add((float)1.2, (float)4.5) << endl;//对实参进行强制类型转换
return 0;
}
确实能解决这个问题,但还是无法理解这个问题产生的原因。
求各位赐教,如果我哪里描述有问题敬请指正,感谢