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

Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 134, средняя оценка - 4.77
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
01.10.2011, 19:19     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #1
Добрый вечер.
Это опять я, чайник. Решаю такую задачу: "Вывести на экран N-ое число из ряда Фибоначчи".
Использую формулу Бине
Написал код:
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
#include <iostream> 
#include <conio.h>
#include <math.h>
using namespace std;
void Fibonacci(int); //Прототип функции
int Number;
int main() 
{       
    int N;
    cout<<"Vvedite nomer chisla iz riada Fibonacci"<<endl<<"N=";
    cin>>N;
    Fibonacci(N); //Вызывет функцию, которая определяет
                       //N-ое число Фибоначчи
    cout<<Number; //Выводит N-ое число Фибоначчи            
    cout<<endl; 
    getch();  
    return 0;
}
void Fibonacci(int K) //Описание функции
{
    double x, y, F, G;
    int i;
    F=(1+sqrt(5))/2;
    G=(1-sqrt(5))/2;
    x=1;
    y=1;
    for (i=1; i<=K; i++)
    {
        x*=F;
        y*=G;
    }
    Number=(x-y)/(sqrt(5));
}
Выводит при компиляции следующее:
"1>------ Построение начато: проект: 17_Fibonacci_Numbers, Конфигурация: Debug Win32 ------
1>Компиляция...
1>17_Fibonacci_Numbers.cpp
1>d:\my documents\программирование_информатика\c++\17_fibonacci_numbers\17_fibonacci_numbers.cpp(32) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\conio.h(145): см. объявление 'getch'
1>d:\my documents\программирование_информатика\c++\17_fibonacci_numbers\17_fibonacci_numbers.cpp(39) : error C2668: sqrt: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(581): может быть 'long double sqrt(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(533): или 'float sqrt(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(128): или 'double sqrt(double)'
1> при попытке сопоставить список аргументов '(int)'
1>d:\my documents\программирование_информатика\c++\17_fibonacci_numbers\17_fibonacci_numbers.cpp(40) : error C2668: sqrt: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(581): может быть 'long double sqrt(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(533): или 'float sqrt(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(128): или 'double sqrt(double)'
1> при попытке сопоставить список аргументов '(int)'
1>d:\my documents\программирование_информатика\c++\17_fibonacci_numbers\17_fibonacci_numbers.cpp(48) : error C2668: sqrt: неоднозначный вызов перегруженной функции
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(581): может быть 'long double sqrt(long double)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(533): или 'float sqrt(float)'
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(128): или 'double sqrt(double)'
1> при попытке сопоставить список аргументов '(int)'
1>Журнал построения был сохранен в "file://d:\My documents\Программирование_Информатика\C++\17_Fibonacci_Numbers\Debug\BuildLog.htm"
1>17_Fibonacci_Numbers - ошибок 3, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 =========="

В итоге одна и та же ошибка 3 раза встречается:
error C2668: sqrt: неоднозначный вызов перегруженной функции

У меня 2 вопроса:
1) Что эта ошибка вообще означает? Не понимаю, что ему не нравится. Проблема с корнем из 5 sqrt(5)?
2) Как исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.10.2011, 19:24     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #2
C++
1
sqrt(5.0)
Добавлено через 44 секунды
по умолчанию
5 - int
5. or 5.0 - double
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
01.10.2011, 19:34     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #3
Как уже выше сказали, 5 - это int.
Функция sqrt не перегружена для типа int, поэтому ей надо преобразовать тип int в тот, которым она перегружена. Вопрос: а в какой тип? float? double? Вот компилятор и не может выбрать, потому что все типы подходят.
Navern
4 / 4 / 0
Регистрация: 01.10.2011
Сообщений: 33
01.10.2011, 19:40     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #4
Ошибка связана с тем, что значение передающееся в параметре представляет значение типа int. А lvalue F является переменной типа double. Прочитай про то как определяется какая функция точно будет вызываться, когда функция перегружена.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
01.10.2011, 19:58     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #5
Цитата Сообщение от Navern Посмотреть сообщение
А lvalue F является переменной типа double.
Что за lvalue F?
Прочитай про то как определяется какая функция точно будет вызываться, когда функция перегружена.
при int никакая не вызовется.
float -> float
double -> double
и т.д.
Нет?
Или вы что-то другое имели в виду?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.10.2011, 20:01     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #6
Chelioss, http://citforum.ru/programming/cpp_ref/ref_3.shtml
Navern
4 / 4 / 0
Регистрация: 01.10.2011
Сообщений: 33
01.10.2011, 20:05     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #7
Цитата Сообщение от Chelioss Посмотреть сообщение
Что за lvalue F?

при int никакая не вызовется.
float -> float
double -> double
и т.д.
Нет?
Или вы что-то другое имели в виду?
Не, скорее сам показал незнание материала. lvalue F, это переменная с именем F которой будет присваиваться значение выражения (1+sqrt(5))/2) (в этом примере кода). Я думал от этого отталкивается компилятор в определении к какой конкретно функции прибегнуть. Не знал, что при int никакая не вызовется.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
01.10.2011, 20:17     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #8
Jupiter
Я спрашивал, что такое lvalue F, а не lvalue, хотя уже выше ответили.

Добавлено через 4 минуты
Цитата Сообщение от Navern Посмотреть сообщение
Я думал от этого отталкивается компилятор в определении к какой конкретно функции прибегнуть.
Ни в каких случаях от этого компилятор не отталкивается.
Navern
4 / 4 / 0
Регистрация: 01.10.2011
Сообщений: 33
02.10.2011, 02:52     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #9
Цитата Сообщение от Chelioss Посмотреть сообщение
Jupiter
Я спрашивал, что такое lvalue F, а не lvalue, хотя уже выше ответили.

Добавлено через 4 минуты

Ни в каких случаях от этого компилятор не отталкивается.
только сигнатура?
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
02.10.2011, 07:59  [ТС]     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #10
Всем спасибо. Заработало.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2011, 11:39     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции
Еще ссылки по теме:

C++ Неоднозначный вызов перегруженной функции
C++ Ошибка 2, error C2668: pow: неоднозначный вызов перегруженной функции
C++ Ошибка: неоднозначный вызов перегруженной функции

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
02.10.2011, 11:39     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции #11
Цитата Сообщение от Navern Посмотреть сообщение
только сигнатура?
Да, только сигнатура.
Yandex
Объявления
02.10.2011, 11:39     Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции
Ответ Создать тему
Опции темы

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