'当多个重载函数实例“sqrt”匹配参数列表'时,我该怎么办?

时间:2012-02-24 23:17:44

标签: c++ overloading sqrt

我在for循环中的代码中遇到错误for ( j = 3; j <=sqrt(num); j +=2)

  

多个重载函数“sqrt”的实例与参数列表匹配。

我该如何解决?

# include <cmath>

// determine if number is prime
bool isPrime (long n) 
{
  int j, num = 0;
  {
    if (num <=1)
      return false;
  }
  for ( j = 3; j <=sqrt(num); j +=2)
  {
    if (num % j == 0)
      return false;
  }   
  return true;
}

3 个答案:

答案 0 :(得分:10)

尝试:

for (j = 3; j <= std::sqrt(static_cast<float>(num)); j +=2)

正在发生的事情是<cmath>包含3个不同的definitions of sqrt,并且编译器不知道您尝试使用哪个。

答案 1 :(得分:0)

在第二个功能之后,你错过了代码中的一个尖括号 你用-lm标签编译它吗?

另外你需要将t类型j作为int。

答案 2 :(得分:-1)

您需要编写合理的sqrt函数。 Newton's method可能是最简单的方法。另外,每次循环时都不要调用sqrt函数。只需打电话一次。