“多个重载函数实例”std :: pow“匹配参数列表”

时间:2012-03-04 12:47:15

标签: c++ namespaces constants c-preprocessor

使用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”与参数列表匹配

什么是正确的语法?

3 个答案:

答案 0 :(得分: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 :(得分:2)

我认为最好的方法是定义一个常量变量并在不使用pow函数的情况下对其进行初始化,如下所示

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

答案 2 :(得分:1)

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

double pow(double base, double exponent);

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