重载函数“std::pow”的多个实例与参数列表匹配 用C++,我尝试 #define TINY std::pow(10,-10)

重载函数“std::pow”的多个实例与参数列表匹配 用C++,我尝试 #define TINY std::pow(10,-10),c++,namespaces,constants,c-preprocessor,C++,Namespaces,Constants,C Preprocessor,我给出了定义了TINY的class.h的包含和名称空间信息的代码 #pragma once #include "MMath.h" #include <string> #include <cmath> #include <vector> using namespace std; #define TINY std::pow(10,-10) 我在.cpp文件中的一些函数实现中使用了TINY,TINY给出了错误 IntelliSense:重载函数std::pow

我给出了定义了TINY的class.h的包含和名称空间信息的代码

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

using namespace std;

#define TINY std::pow(10,-10)
我在.cpp文件中的一些函数实现中使用了TINY,TINY给出了错误

IntelliSense:重载函数std::pow的多个实例与参数列表匹配

什么是正确的语法?

编辑:我确实同意评论员的说法,使用std::pow代替文字常量是不必要的——因此对于这个特殊问题,使用1.0E-10常量;我对您遇到的实际错误以及解决方法的解释仍然有效

这与您的定义无关。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)
分别使用。

尝试使用std::pow10.0,-10.0代替:std::pow有多个匹配您的参数列表;指定10.0,-10.0将强制使用特定重载:

double pow(double base, double exponent);

请注意,根据TINY的使用情况,此定义可能不太理想:每次在代码中使用它时,都会调用std::pow来计算相同的值。更好的方法是使用一个静态变量,设置一次,然后从此开始使用。

我认为最好的方法是定义一个常量变量并初始化它,而不使用pow函数,如下所示

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

问题的标题很容易引起误解,因为它与预处理器完全无关。为什么要使用pow,而不是只写1e-10?请尝试std::pow10.0,10.0显式选择浮点/双重载。+1表示PlasmaHH:使用const double tiny=1e-10;是目前为止最好的也是最流行的C++解决方案。两种解决方案都运行良好。谢谢