Неоднозначная ошибка вызова заключается в том, что она не знает, какую функцию вызывать, не в том, что она неявно преобразуется.
посмотрите на следующее. Если я создаю свою собственную функцию, которая принимает удвоение и возвращает удвоение, не возникает проблем с явным преобразованием. Поскольку ваше целое число может быть преобразовано в любую из трех перегрузок, оно не знает, что вызвать.
double mysqrt(double d)
{
return d;
}
using namespace std;
int main(int argc, char ** argv)
{
int k;
for(k = 1; k <= 10; k++)
cout << "The square root of k is: " << mysqrt(k) << endl;
return 0;
}//Works Fine
Однако, если я добавлю еще одну версию mysqrt с плавающей точкой, я создаю неоднозначную ошибку вызова.
double mysqrt(float f)
{
return f;
}
double mysqrt(double d)
{
return d;
}
using namespace std;
int main(int argc, char ** argv)
{
int k;
for(k = 1; k <= 10; k++)
cout << "The square root of k is: " << mysqrt(k) << endl;
return 0;
}//error C2668: 'mysqrt' : ambiguous call to overloaded function