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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 134, средняя оценка - 4.77
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
#1

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

01.10.2011, 19:19. Просмотров 18191. Ответов 10
Метки нет (Все метки)

Добрый вечер.
Это опять я, чайник. Решаю такую задачу: "Вывести на экран 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) Как исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2011, 19:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции (C++):

Error C2668: sqrt: неоднозначный вызов перегруженной функции - C++
Что не так? Ma= sqrt ((2*b^2 + 2 * c^2 - a^2)/4); Mb= sqrt ((2*a^2 + 2 * c^2 - b^2)/4); Mc= sqrt ((2*a^2 + 2 * b^2 - b^c)/4); ...

Ошибка C2668: mult: неоднозначный вызов перегруженной функции - C++
Помогите пожалуйста, не знаю как правильно избавиться от ошибки. Исчезает только если из объявления в параметрах (33 строчка) убрать...

Ошибка: error C2668: abs: неоднозначный вызов перегруженной функции - C++
Мне выкидывает ошибку при сборке. 1&gt; QueueTest.cpp 1&gt;c:\documents and settings\администратор\рабочий...

Ошибка: error C2668: abs: неоднозначный вызов перегруженной функции - C++ - C++
Мне выкидывает ошибку при сборке. 1&gt; CCRakNetSlidingWindow.cpp 1&gt;..\Common\RakNet\CCRakNetSlidingWindow.cpp(221): error C2668: abs:...

Ошибка 2, error C2668: pow: неоднозначный вызов перегруженной функции - C++
Пытаюсь разобраться с функциями. И потому усложнил обычный пример. Вылезла ошибка: Ошибка 2, error C2668: pow: неоднозначный вызов...

Ошибка в программе error C2668: std::to_string: неоднозначный вызов перегруженной функции - C++
FILE *f1; f1 = fopen(&quot;matrix.txt&quot;, &quot;w&quot;); for (unsigned int i = 0; i &lt; matrix.size(); i++) { vector&lt;double&gt; s =...

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

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

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

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

Ни в каких случаях от этого компилятор не отталкивается.
только сигнатура?
0
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
02.10.2011, 07:59  [ТС] #10
Всем спасибо. Заработало.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
02.10.2011, 11:39 #11
Цитата Сообщение от Navern Посмотреть сообщение
только сигнатура?
Да, только сигнатура.
0
02.10.2011, 11:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2011, 11:39
Привет! Вот еще темы с ответами:

Error C2668: pow: неоднозначный вызов перегруженной функции - C++
#include &lt;math.h&gt; //библиотека, содержащая описание математических операторов #include &lt;conio.h&gt; //библиотека, содержащая описание...

Error C2668: std::to_string: неоднозначный вызов перегруженной функции - C++
вот код #include &quot;stdafx.h&quot; #include &lt;Windows.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int...

Неоднозначный вызов перегруженной функции (sqrt) - C++
Вот в программе написано: int n, b; n = sqrt(b); // &lt;-- Неоднозначный вызов перегруженной функции... Может формат записи не тот ?

Ошибка: неоднозначный вызов перегруженной функции - C++
Ошибка:= error C2668: TCalc::TCalc: неоднозначный вызов перегруженной функции myclass\myclass.cpp MyClass TCalc.cpp #include...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru