"more than one instance of overloaded function " 标准::p ow " matches the argument list"

"more than one instance of overloaded function "std::pow" matches the argument list"

本文关键字:ow the list argument matches function than more one instance overloaded      更新时间:2023-10-16

使用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)

我在.cpp文件中的一些函数实现中使用了TINY,TINY给出了错误

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

什么是正确的语法?

编辑:我同意评论者的说法,用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)

分别。

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

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

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

double pow(double base, double exponent);

注意,这个#define可能是次优的,这取决于TINY的使用:每次在代码中使用它时,都会调用std::pow来计算相同的值。更好的方法是使用一个静态变量,设置一次,然后从那时起使用

相关文章: