Форум программистов, компьютерный форум CyberForum.ru

Error C2668: 'sqrt' : ambiguous call to overloaded function - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
Ronflat
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 37
24.12.2011, 14:21     Error C2668: 'sqrt' : ambiguous call to overloaded function #1
Собственно задание:
треугольник задан координатами своих вершин. Найти его периметр и площадь
Вот Код,но он почему не работате выдает вот такие ошибки
>d:\doc\c++\test\test\c++.cpp(14) : error C2668: 'sqrt' : ambiguous call to overloaded function
1> d:\program files\microsoft visual studio 9.0\vc\include\math.h(581): could be 'long double sqrt(long double)'
1> d:\program files\microsoft visual studio 9.0\vc\include\math.h(533): or 'float sqrt(float)'
1> d:\program files\microsoft visual studio 9.0\vc\include\math.h(128): or 'double sqrt(double)'


#include <windows.h>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <stdio.h>
#include <math.h>
#define sqr(x) x*x
//---------------------------------------------------------------------------
 
double GetLengthByCorXY(int x1, int y1, int x2, int y2);
double GetPerimeterOfOfTrigByCoorXY(int x1, int y1, int x2, int y2, int x3, int y3);
double GetSquareOfTrigByCoorXY(int x1, int y1, int x2, int y2, int x3, int y3);
//---------------------------------------------------------------------------
 
double GetLengthByCorXY(int x1, int y1, int x2, int y2)
{
return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}
//---------------------------------------------------------------------------
 
double GetPerimeterOfOfTrigByCoorXY(int x1, int y1, int x2, int y2, int x3, int y3)
{
double iResult = 0;
// ----
iResult += GetLengthByCorXY(x1, y1, x2, y2);
iResult += GetLengthByCorXY(x1, y1, x3, y3);
iResult += GetLengthByCorXY(x2, y2, x3, y3);
// ----
return iResult;
}
//---------------------------------------------------------------------------
 
double GetSquareOfTrigByCoorXY(int x1, int y1, int x2, int y2, int x3, int y3)
{
double iResult = 0;
// ----
byte buf[5][3];
memset(&buf, 0, sizeof(buf));
int i = 0;
// ----
buf[0][0] = x1;
buf[0][1] = y1;
buf[0][2] = 1;
buf[1][0] = x2;
buf[1][1] = y2;
buf[1][2] = 1;
buf[2][0] = x3;
buf[2][1] = y3;
buf[2][2] = 1;
buf[3][0] = x1;
buf[3][1] = y1;
buf[3][2] = 1;
buf[4][0] = x2;
buf[4][1] = y2;
buf[4][2] = 1;
// ----
for(i = 0; i < 3; i++)
{
iResult += buf[i][0] * buf[i + 1][1] * buf[i + 2][2];
iResult -= buf[i][2] * buf[i + 1][1] * buf[i + 2][0];
}
// ----
iResult = abs(iResult);
iResult *= 0.5;
// ----
return iResult;
}
//---------------------------------------------------------------------------
 
void main()
{
double dSquare = 0, dPerimeter = 0;
int x1, y1, x2, y2, x3, y3;
// ----
printf("Please write x1: ");
scanf("%d", &x1);
printf("Please write y1: ");
scanf("%d", &y1);
printf("Please write x2: ");
scanf("%d", &x2);
printf("Please write y2: ");
scanf("%d", &y2);
printf("Please write x3: ");
scanf("%d", &x3);
printf("Please write y3: ");
scanf("%d", &y3);
// ----
dSquare = GetSquareOfTrigByCoorXY(x1, y1, x2, y2, x3, y3);
dPerimeter = GetPerimeterOfOfTrigByCoorXY(x1, y1, x2, y2, x3, y3);
// ----
printf("\nSquare = %f\n", dSquare);
printf("Perimeter = %f\n\n", dPerimeter);
// ----
system("Pause");
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 14:21     Error C2668: 'sqrt' : ambiguous call to overloaded function
Посмотрите здесь:

C++ Ambiguous call to overloaded function
C++ Ambiguous access to overloaded function
'sqrt' : ambiguous call to overloaded function C++
Error: call of overloaded ‘Function’ is ambiguous C++
C++ Abiguous call to overloaded function
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaVyLoN
 Аватар для ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
24.12.2011, 14:52     Error C2668: 'sqrt' : ambiguous call to overloaded function #2
Цитата Сообщение от Ronflat Посмотреть сообщение
return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
sqrt должен у Вас принимать в качестве параметра тип double

C++
1
return sqrt((double)(sqr(x1 - x2) + sqr(y1 - y2)));
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,170
Завершенные тесты: 1
24.12.2011, 14:57     Error C2668: 'sqrt' : ambiguous call to overloaded function #3
C++
1
return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
переделайте на
C++
1
return sqrt((double)sqr(x1 - x2) + sqr(y1 - y2));
ZaVyLoN
 Аватар для ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
24.12.2011, 15:17     Error C2668: 'sqrt' : ambiguous call to overloaded function #4
zss2

Не по теме:

Дублировать ответ глупо!

go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.12.2011, 15:31     Error C2668: 'sqrt' : ambiguous call to overloaded function #5
Цитата Сообщение от ZaVyLoN Посмотреть сообщение
sqrt должен у Вас принимать в качестве параметра тип double
Не обязательно, существует три перегруженные функции
C++
1
2
3
double sqrt (      double x );
      float sqrt (       float x );
long double sqrt ( long double x );
Цитата Сообщение от Ronflat Посмотреть сообщение
#define sqr(x) x*x
Цитата Сообщение от Ronflat Посмотреть сообщение
sqr(x1 - x2)
Уверены, что считает правильно?
C
1
#define SQR(x) ((x)*(x))
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,170
Завершенные тесты: 1
24.12.2011, 15:45     Error C2668: 'sqrt' : ambiguous call to overloaded function #6
Цитата Сообщение от ZaVyLoN Посмотреть сообщение
zss2

Не по теме:

Дублировать ответ глупо!

Случайно получилось - пока писал ответ, меня опередили.
Можете этот и тот посты удалить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2011, 15:52     Error C2668: 'sqrt' : ambiguous call to overloaded function
Еще ссылки по теме:

C++ Error C2668: sqrt: неоднозначный вызов перегруженной функции
C++ Ошибка: ('sqrt' : ambiguous call to overloaded function)
Ambiguous call to overloaded function / рекурсивная функция C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ZaVyLoN
 Аватар для ZaVyLoN
83 / 83 / 6
Регистрация: 26.10.2009
Сообщений: 269
24.12.2011, 15:52     Error C2668: 'sqrt' : ambiguous call to overloaded function #7
Цитата Сообщение от go Посмотреть сообщение
Не обязательно, существует три перегруженные функции
В курсе!

Поэтому и написал:
Цитата Сообщение от ZaVyLoN Посмотреть сообщение
sqrt должен у Вас принимать в качестве параметра тип double
Возвращаемый тип в программе double.

Не по теме:

Вчитываемся и разбираемся






zss2, бывает.
Yandex
Объявления
24.12.2011, 15:52     Error C2668: 'sqrt' : ambiguous call to overloaded function
Ответ Создать тему
Опции темы

Текущее время: 11:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru