あいまいな呼び出しエラーは、暗黙的に変換されていないということではなく、呼び出す関数がわからないことです。
以下を見てください。doubleを受け取り、doubleを返す独自の関数を作成した場合、暗黙的に変換しても問題はありません。整数は3つのオーバーロードのいずれかに変換できるため、何を呼び出すべきかわかりません。
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
ただし、floatを使用する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