Существует более одного экземпляра перегруженная функция pow

Существует более одного экземпляра перегруженная функция pow

У меня проблемы с запуском следующего кода. Я получил это: ошибка C2668: «Pow»: неоднозначный вызов перегруженной функции. Я пытался вручную привести аргументы к подходящему типу, используя static_cast, однако я думаю, что получаю некоторые ошибки указателя ?!

Программа должна преобразовать число из базы 16 в базу 10.

Как я могу это исправить? Спасибо.

Решение

strlen тип возврата size_t в C ++. Таким образом, вы можете устранить неоднозначность с помощью приведения:

и главное должно вернуться int вместо void :

Другие решения

Хотя вы пометили свой вопрос как вопрос на C, вы фактически скомпилировали свою программу как программу на C ++, потому что это C ++, которая позволяет перегружать функции.

В вашем случае компилятор C ++ не может выбрать подходящую перегруженную функцию pow. Сообщение об ошибке ясно показывает, какие функции учитывает компилятор. Чтобы убрать неоднозначность, вы можете вызвать функцию, например, следующим образом

В этом случае компилятор будет использовать функцию

Учтите, что в C / C ++ функция main должна иметь тип возвращаемого значения int ,

В C функция определяется как

в то время как в C ++ это обычно определяется как

И я думаю, что есть опечатка

Вместо строкового литерала «А» должен быть символьный литерал «А»

В С язык, который мы можем найти библиотечную функцию под math.h:

В C ++ язык мы можем иметь множество перегруженных функций под CMATH такие как:

Поскольку вы использовали программирование в стиле C, но скомпилировали его с помощью компилятора C ++, компилятор может столкнуться с состояниями неоднозначности с определенной функцией в математической библиотеке, поэтому вам следует соответствующим образом преобразовать аргумент в соответствии с определением функции 1 как упоминалось выше, поэтому измените свой код как,

Читайте также:  Burnout paradise не запускается

ТАКЖЕ ОТМЕЧАЕТСЯ
с в данном фрагменте кода ошибка как Perreal отметил

Вы не можете выполнять арифметические операции со строковым литералом. измените его, как упоминал Птефан
,также изменить
int result в double result если вам нужна высокая точность и точные результаты.

C ++ 98 предоставляет следующие перегруженные версии pow :

Первый аргумент, который вы используете, 16 , может быть преобразован в любой из типов первых аргументов, используемых в этих функциях. Следовательно, компилятор не может разрешить неоднозначность. Вы можете устранить неоднозначность, явно указав первый аргумент, указав его тип. Любое из следующего должно работать:

Если вы можете использовать C++11 Вы можете использовать свой существующий код. Это имеет перегрузку:

где Type1 а также Type2 являются арифметические типы .

5 octoback [2012-03-04 15:47:00]

Я предоставляю код с информацией о #include и пространстве имен для класса (.h), где определен TINY

Я использую TINY в некоторой реализации функции в файле .cpp, а TINY дает ошибку

IntelliSense: более одного экземпляра перегруженной функции "std:: pow" соответствует списку аргументов

Что такое правильный синтаксис?

c++ c-preprocessor namespaces constants

3 ответа

10 Решение pmdj [2012-03-04 15:49:00]

Изменить: Я согласен с комментаторами в том, что использование std:: pow() вместо константы литерала необязательно — поэтому для этой конкретной задачи перейдите к константе 1.0E-10 ; мое объяснение фактической ошибки, которую вы получали, и способ ее решения по-прежнему стоит.

Это не имеет никакого отношения к вашему #define . std::pow() является перегруженной функцией, и ни одна из ее перегрузок не принимает (int, int) в качестве аргументов. Вы должны предоставить аргументы типам, которые однозначно выбирают перегрузку. В зависимости от типа возвращаемого значения вы, вероятно, захотите выбрать одну из этих перегрузок:

Читайте также:  Мир юрского периода 2 киноляпы

который вы можете вызвать следующим образом:

Я думаю, что лучший способ — определить постоянную переменную и инициализировать ее без использования функции pow , например,

Попробуйте вместо этого использовать std::pow(10.0,-10.0) : std::pow имеет несколько перегрузок, соответствующих вашему списку аргументов; указание 10.0,-10.0 заставляет использовать конкретную перегрузку:

Обратите внимание, что этот #define может быть субоптимальным в зависимости от использования TINY : каждый раз, когда вы используете его в своем коде, вызов будет сделан для std::pow для вычисления того же значения. Лучшим подходом было бы использовать статическую переменную, установить ее один раз и использовать ее с этой точки.

Пишу программу на языке C++:

Но в строке else u = x*pow(sin,3.)*x; выдает две ошибки: Первая:

Отсутствуют экземпляры перегруженная функция pow, соответствующие списку аргументов, типы аргументов ( , double )

Не удается определить экземпляр перегруженная функция sin, использование которого предполагается

Как их исправить?

1 ответ 1

Во-первых, примите за привычку форматировать свой код. Пусть в данной ситуации вам это не сильно поможет, но в будущем вы сможете избежать множества досадных ошибок.

Во-вторых, в строке, в которой ошибка вы в качестве аргумента функции pow используете функцию sin . Скорее всего, вы имели ввиду что-то вроде else u = x*pow(sin(x),3.)*x; , но опечатались.

И ещё: очень рекомендую брать код веток if/else/for/while в фигурные скобки, даже если там всего одна строка. Сам множество раз сталкивался с ситуациями, когда в такие ветки дописывалась вторая строка, а скобки не ставились, что вело к весьма неприятным ошибкам.

Ссылка на основную публикацию
Стоит ли учиться на нефтяника
Добыча газа и нефти — очень популярная сфера в России. Именно поэтому большое количество выпускников стремится поступать на специальность «Нефтегазовое...
Сони плейстейшен нетворк вход
Игры по сети, развлечения, друзья, покупки и многое другое – ваше сетевое приключение начинается в PSN. Подключитесь к нашему сетевому...
Сони f3112 xperia xa
Недорогой смартфон компании Sony (22 990 рублей за Dual версию) с интересным дизайном, LTE, двумя отдельными слотами для SIM-карт, слотом...
Стойка для аудио аппаратуры своими руками
Решил создать данную тему,т.к. думаю форумчанам будет интересно почитать, а кому то и поделиться личным опытом, по изготовлению своими руками...
Adblock detector