2012-03-04 27 views
5

Con C++, cerco di"più di un'istanza di funzione in overload 'std :: pow' corrisponde alla lista degli argomenti"

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

Io do il codice con il #include e namespace informazioni per la classe (. h) dove TINY definito

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

using namespace std; 

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

io uso TINY in qualche implementazione funzione nel file cpp, e piccoli dà l'errore

IntelliSense: più di una istanza di funzione sovraccaricata "std :: pow" corrisponde all'elenco degli argomenti

Qual è la sintassi corretta?

+4

titolo la domanda è molto fuorviante dal momento che non ha assolutamente nulla a che fare con il preprocessore. Perché stai usando pow, invece di scrivere solo 1e-10? – PlasmaHH

+0

prova std :: pow (10.0, 10.0) per selezionare esplicitamente il float/doppio overload. –

+6

+1 per PlasmaHH: l'uso di 'const double tiny = 1E-10;' è di gran lunga la soluzione migliore e più-C++. –

risposta

10

Edit: Sono d'accordo con i commentatori dire che l'utilizzo di std :: pow() al posto di una costante letterale è inutile - così per questo particolare problema, andare con la costante 1.0E-10; la mia spiegazione dell'errore effettivo che stavi ottenendo e il modo per risolverlo è ancora valido.

Questo non ha nulla a che fare con il tuo #define. std::pow() è una funzione sovraccaricata e nessuno dei relativi sovraccarichi richiede (int, int) come argomenti. Dovresti fornire argomenti con tipi che selezionano in modo univoco un sovraccarico. A seconda del tipo di valore di ritorno che si desidera, probabilmente desidera selezionare uno di questi sovraccarichi:

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

che è possibile richiamare i seguenti:

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

rispettivamente.

1

Provare a utilizzare std::pow(10.0,-10.0) invece: std::pow ha più overloads corrispondente all'elenco di argomenti; specificando 10.0,-10.0 impone l'utilizzo del sovraccarico specifica:

double pow(double base, double exponent); 

Si noti che questo #define potrebbe non essere ottimale a seconda l'uso di TINY: ogni volta che si utilizza nel codice, una chiamata sarà fatto per std::pow per calcolare il stesso valore Un approccio migliore sarebbe usare una variabile statica, impostarla una volta e usarla da quel punto in poi.

2

Penso che il modo migliore è quello di definire una variabile costante e inizializzare senza utilizzare la funzione pow, come questo

const double TINY = 1E-10; //1e-10 is 10 to the power of -10 
Problemi correlati