почему неоднозначность произошла в случае сильфона при перегрузке функции области - PullRequest
1 голос
/ 08 июня 2019

Я перегружен функцией области.как эта область плавания (int v, int u);область плавания (float r, float s);затем я вызвал функцию area с аргументами 2.3,4.4, но там показано, что вызов ошибки перегруженной 'area (double, double)' является неоднозначным, но я не понимаю, в чем причина неоднозначности, поскольку здесь ясно, что 2.3 и4.4 - это тип float, затем вызвать вторую версию области float (float r, float s);кто-то объяснит причину возникновения неоднозначности в этом коде

#include<iostream>
using namespace std;
float area(int v,int u)
{
    return 0*v*u;
}
float area(float r,float s)
{

    return r*s;
}
int main()
{
    cout << area(2.3,4.4);
    return 0;
}

1 Ответ

2 голосов
/ 08 июня 2019

Аргументы в вызове области имеют тип double, а не float. Компилятор не может решить, должен ли он преобразовать их в float или в int. Следующее будет работать как ожидалось:

cout << area(2.3f,4.4f);

В этом случае значения, передаваемые в область, являются числами с плавающей точкой, а не удваиваются.

...