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

С C ++ я пытаюсь

#define TINY std::pow(10,-10)

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

#pragma once
#include "MMath.h"
#include <string>
#include <cmath>
#include <vector>

using namespace std;

#define TINY std::pow(10,-10)

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

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

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

Ответы [ 3 ]

10 голосов
/ 04 марта 2012

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

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

      float pow (       float base,       float exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );

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

std::pow(10.0f, -10.0f)
std::pow(10.0, -10)
std::pow(10.0L, -10)

соответственно.

2 голосов
/ 04 марта 2012

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

const double TINY = 1E-10; //1e-10 is 10 to the power of -10
1 голос
/ 04 марта 2012

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

double pow(double base, double exponent);

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

...