Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30

Ошибка "неоднозначный вызов перегруженной функции"

16.11.2012, 22:01. Показов 2646. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include "math.h"
 
using namespace std;
 
int count(int a,int b)
{
    return  a/pow(10,b-1)%10;
}
 
 
int numcount(int x)
{
    int a=0;
    while (x>=1)
    {
        a++;
        x/=10;
    }
 
    return a;
}
 
 
int main()
{
    int a=0;
    cout<<"Enter N : ";
    cin>>a;
    int f=0;
    int g=0;
    int d=0;
    while(d != 1)
    {
    d=numcount(a);
    for (int i=1;i<=d;i++)
    {
        g=count(a,i);
            f+=g;
    }
    a=f;
    f=0;
    }
    cout<<"Koren : "<<a;
    system("pause");
    return 0;
}
Ошибка
error C2668: pow: неоднозначный вызов перегруженной функции
1> D:\Programm\VisualStudio\VC\include\math .h(575): может быть 'long double pow(long double,int)'
1> D:\Programm\VisualStudio\VC\include\math .h(527): или 'float pow(float,int)'
1> D:\Programm\VisualStudio\VC\include\math .h(489): или 'double pow(double,int)'
1> при попытке сопоставить список аргументов '(int, int)'
В строчке
Code
1
return  a/pow(10,b-1)%10;
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2012, 22:01
Ответы с готовыми решениями:

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

Ошибка sin: неоднозначный вызов перегруженной функции
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; using namespace std; int main() { double f={0}; int i; ...

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

18
 Аватар для Starscream
57 / 45 / 14
Регистрация: 04.11.2012
Сообщений: 106
16.11.2012, 22:27
где pow(10,b-1)...
10.0 запиши
1
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30
16.11.2012, 22:30  [ТС]
Пробовал и 10.0f тоже пробовал чет не катит
0
 Аватар для prosto_lynx
49 / 25 / 2
Регистрация: 09.06.2008
Сообщений: 227
16.11.2012, 22:53
pow(10,b-1)%10 = 0 при любом b! Т.е. деление на ноль))

Добавлено через 25 секунд
p.s. кроме b=1...

Добавлено через 19 минут
Извиняюсь... я, кажется, поторопился с выводами..))
1
 Аватар для Снусмумрик
67 / 3 / 2
Регистрация: 15.11.2012
Сообщений: 20
16.11.2012, 23:22
Странно, у меня в gcc все нормально вызвалось. Попробуйте ввести дополнительную переменную. Что-то вроде этого:
C++
1
2
    double val = 10.0;
    return ( (int)(a/pow(val,b-1)))%10;
И еще не забудьте привести левую часть operator% к int, иначе будет попытка взять остаток от деления дробного числа.
0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30
16.11.2012, 23:56  [ТС]
Снусмумрик, Спасибо заработало, обьясните пожалуйста в чем смысл.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.11.2012, 00:08
Цитата Сообщение от freshness Посмотреть сообщение
Спасибо заработало, обьясните пожалуйста в чем смысл.
Он тебе писал что у pow несколько реализаций
C++
1
2
3
float pow(float,int);
long double pow(long double,int);
double pow(double,int);
и он не знает к чему твои 10 приводить, соответственно какую функцию вызывать
та же история и с 10.0
а когда ты явно объявил double все стало ясно
все это делается проще приведением типов
C++
1
return  a/pow((double)10,b-1)%10;
тип можешь выбрать любой(среди разрешенных конечно)
1
 Аватар для Снусмумрик
67 / 3 / 2
Регистрация: 15.11.2012
Сообщений: 20
17.11.2012, 00:17
После того как компилятор нашел функции pow (их целых три) он должен выбрать одну, которая лучше всего подходит для вызова. Он составляет список кандидатов и делает следующие вещи (за строгую последовательность компилятора VC не ручаюсь):
1. Исключает недоступные функции (private и т.д.);
2. Исключает функции с не тем числом параметров;
3. Исключает функции, чьи параметры не могут быть преобразованы в аргументы вызова;
4. Исключает функции, для которых требуется сужающее преобразование;
5. Исключает функции, которые требует расширения аргументов(или большего расширения, чем другие функции).
После этого должна остаться только одна функция. Если их больше, то возникает ошибка. В Вашем случае возникает странная вещь, так как double, float и long double требуют разного расширения. По крайней мере g++ не ругается. Наверное, у Вас стоит VC 5, 6 или 7. Для них double и long double - один и тот же тип. Поэтому у него после выполнения всех пунктов остались две функции, и он не может выбрать, какую ему вызвать.

Попытка передать 10.0 тоже не работает, т.к. не указывает явно, какой это тип, а объявление double val - указывает.
Примерно так)
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.11.2012, 00:50
Цитата Сообщение от Снусмумрик Посмотреть сообщение
Для них double и long double - один и тот же тип.
с какого перепугу? 64 бита и 80?
ты лучше скажи 10.0 это float? double? или long double?
вот и компилятор не знает
а к чему приводить 10?
явное приведение снимает все вопросы

Добавлено через 1 минуту
Цитата Сообщение от Снусмумрик Посмотреть сообщение
По крайней мере g++ не ругается.
а ты не думаешь что там стоит реализация для int ?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 00:59
ValeryS, Откуда взялось 64 и 80?
n3337 3.9.1/8
There are three floating point types: float, double, and long double. The type double provides at least
as much precision as float, and the type long double provides at least as much precision as double.
Литерал 10.0 это double без вариантов.

n3337 2.14.4/1

The type of a floating literal is double unless explicitly specified by a suffix.
Собственно в С++03 написано тоже самое.
2
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.11.2012, 01:07
Цитата Сообщение от ForEveR Посмотреть сообщение
Откуда взялось 64 и 80?
размер дубли и длинной дубли
8 байт и 10 байт
или конкретно откуда я взял? из литературы описания переменных
завтра замерю на VS2008
Цитата Сообщение от ForEveR Посмотреть сообщение
n3337 2.14.4/1
не знал,не приходилось сталкиваться спасибо
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 01:12
ValeryS, Хм. Не заметил что VS. Ну да будет так. Хотя к примеру у меня в VS

C++
1
2
3
4
int main()
{
    static_assert(sizeof(double) == sizeof(long double), "double != long double");
}
========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========

А так, зависит от оси и реализации определенно.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.11.2012, 01:21
Цитата Сообщение от ForEveR Посмотреть сообщение
Не заметил что VS.
что у ТС я не знаю это у меня VS (еще CodeVisionAVR и Keil ну в микропроцессорах про плавающие вообще можно забыть)
недолюбливаю я плавающие(еще со времен ДОСа) и посему в них плаваю(ниче так каламбурчик)
слушай но если
Цитата Сообщение от ForEveR Посмотреть сообщение
10.0 это double без вариантов.
чавой тогда функцию не распознает?
опять происки Мелкомягких?
0
 Аватар для Снусмумрик
67 / 3 / 2
Регистрация: 15.11.2012
Сообщений: 20
17.11.2012, 01:23
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от ValeryS Посмотреть сообщение
с какого перепугу? 64 бита и 80?
: Я имею в виду реализацию типов данных в компиляторе VC++ Внизу таблицы: long double same as double
Понятно, что на уровне языка это разные типы.


Цитата Сообщение от ValeryS Посмотреть сообщение
а ты не думаешь что там стоит реализация для int ?
Не думаю, потому что вызывал ее и с 10, и с 10.0.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 01:26
Хз. 2012 RC

C++
1
2
3
4
5
6
#include <cmath>
 
int main()
{
    pow(10.0, 5);
}
========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========

2010 Express

========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========

Версий ниже не имею.)
0
 Аватар для Снусмумрик
67 / 3 / 2
Регистрация: 15.11.2012
Сообщений: 20
17.11.2012, 01:28
Цитата Сообщение от ForEveR Посмотреть сообщение
Версий ниже не имею.)
Так вроде только в 5,6 и 7 версии. Потом одумались)
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.11.2012, 01:39
Цитата Сообщение от Снусмумрик Посмотреть сообщение
таблицы: long double same as double
не знал спасибо

Добавлено через 4 минуты
Цитата Сообщение от Снусмумрик Посмотреть сообщение
Не думаю, потому что вызывал ее и с 10, и с 10.0.
откуда увереность что её
стоит такая заглушка( допустим)
C++
1
2
3
4
 double pow(int m, int n)
  {
    return  pow((double) m, int n);
}
и все проблемы снимаются
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 01:43
ValeryS, gcc все-таки следует стандарту. Такие заглушки - нестандартное расширение.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.11.2012, 01:59
Шо вы спорите?
Студия она и есть студия
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2012, 01:59
Помогаю со студенческими работами здесь

Ошибка C2668: sqrt: неоднозначный вызов перегруженной функции
Добрый вечер. Это опять я, чайник. Решаю такую задачу: &quot;Вывести на экран N-ое число из ряда Фибоначчи&quot;. Использую формулу Бине ...

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

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

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

Ошибка в программе error C2668: std::to_string: неоднозначный вызов перегруженной функции
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 =...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru