@baykonurr

Почему выдает ошибку-неоднозначный вызов перегруженной функции?

Есть елементарная програма.
#include <iostream>
#include <math.h>
#include <iomanip> 
using namespace std;
int main()
{
	int x1, x2, y1, y2;
	double l;
	cin >> x1 >> x2 >> y1 >> y2;
	x1=x2-x1;
	y1=y2-y1;
	l=sqrt((x1*x1)+(y1*y1));
	cout << fixed << setprecision(2) << l;
	return 0;
}


и на нее ругаеться вот такими матами
c:\users\home\documents\visual studio 2010\projects\zadacha_2\zadacha_2\zadacha_2.cpp(12): error C2668: sqrt: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(589): может быть "long double sqrt(long double)"
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(541): или "float sqrt(float)"
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(127): или "double sqrt(double)"
1> при попытке сопоставить список аргументов "(int)"

Я новичок поэтому прошу помощи разобраться в чем ошибка.
  • Вопрос задан
  • 2837 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
sqrt((double)((x1*x1)+(y1*y1)))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
1. Вместо #include <math.h>, в C++ нужно использовать #include <cmath>. Она более производительна в некоторых случаях, и там есть больше функций для C++.
2. Зачем вводить int, если всё равно вычисляем double? Тогда программа не сойдёт с ума при больших координатах.
3. Вместо x*x можно использовать pow(x,2) без потери производительности.

Итого:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main()
{
    double x1, x2, y1, y2;
    cin >> x1 >> x2 >> y1 >> y2;
    cout << fixed << setprecision(2) << sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы