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

Ambiguous call to overloaded function - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 149, средняя оценка - 4.88
Feuer
71 / 71 / 7
Регистрация: 13.10.2008
Сообщений: 144
21.11.2008, 21:33     Ambiguous call to overloaded function #1
При использовании sqrt (да и других мат. функций(sin, cos, pow...) ) выдает ошибку, где говорится о неоднозначности. Скажем:
cout<<sqrt(4);
выдает:
error C2668: 'sqrt' : ambiguous call to overloaded function
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(581): could be 'long double sqrt(long double)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(533): or 'float sqrt(float)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(128 ): or 'double sqrt(double)'
1> while trying to match the argument list '(int)'

Как я понял, он не знает к какому типу именно привести, так как возможны все варианты... Я понимаю что можно указать тип для приведения - sqrt((double)4), просто раньше я с таким не сталкивался, скажем в Visual Studio 6 такой ошибки не возникает. Сейчас использую VS 2008, скажите, пожалуйста, это баг?..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2008, 21:33     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
Error C2668: 'sqrt' : ambiguous call to overloaded function C++
C++ Ошибка: ('sqrt' : ambiguous call to overloaded function)
Ambiguous call to overloaded function / рекурсивная функция C++
Ошибка: call of overloaded 'strchr(char&, char)' is ambiguous C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.11.2008, 23:47     Ambiguous call to overloaded function #2
Напиши мелкомягким об этом "баге"
Ну потому что 4 - это int. И не то, что не знает, к какому типу привести, а по правилам C++ он и не должен ни к какому типу число приводить. Даже такой пример:
Код
#include <stdio.h>

void f ( unsigned int i) { }
void f ( void *i) { }

int main ( void ) {
   f ( 0 ) ;
   return 0 ;
}
на адекватном компиляторе компилироваться не должен.

P. S. используй либо свой метод, как выше написал, либо sqrt(4.0)
razsil
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 6
13.12.2015, 13:01     Ambiguous call to overloaded function #3
Столкнулся с похожей проблемой, гугл сюда показал, поэтому пишу, может полезно кому будет.
QT осваиваю, перегружаю abs(), компил ругался на перегрузку функции "double abs(double n)" (call of overloaded is ambiguous).
Причина оказалась в том, что не обратил внимания, что abs() уже по умолчанию в аппликашке был определён (хотя ни cmath, ни math.h подключены не были).
Yandex
Объявления
13.12.2015, 13:01     Ambiguous call to overloaded function
Ответ Создать тему
Опции темы

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