2012-03-04 201 views
5

用C++’的参数列表相匹配”,我尝试的std :: POW“重载函数的多个实例‘

#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) 

我用在.cpp文件中某些功能的实现微小的,和微小的错误给

智能感知:超过一个超载函数实例“std :: pow”与参数列表匹配

什么是正确的语法?

+4

问题标题是非常误导,因为它绝对没有任何关系的预处理器。你为什么使用pow,而不是只写1e-10? – PlasmaHH 2012-03-04 12:50:51

+0

尝试使用std :: pow(10.0,10.0)来显式选择float/double重载。 – 2012-03-04 12:50:51

+6

+1等离子HH:使用'const double tiny = 1E-10;'是迄今为止最好且最C++的解决方案。 – 2012-03-04 13:12:31

回答

10

编辑:我与评论者说,在地方常量的使用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) 

1

尝试使用std::pow(10.0,-10.0)改为:std::pow有多个overloads与您的参数列表相匹配;指定10.0,-10.0强制使用特定的过载:

double pow(double base, double exponent); 

注意的是,根据使用的TINY#define可能不是最优的:每次使用它在你的代码的时候,一个电话将是std::pow作出计算相同的价值。一个更好的方法是使用一个静态变量,设置一次,然后从该点开始使用它。

2

我认为最好的方法是定义一个常变量和初始化它不使用pow功能,这样

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