none
Please help with the error,thanks! RRS feed

  • 问题

  • The c++ code is :

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    int main ()
    {
     int m,k,i,n=0;
     bool prime;
     for (m=101;m<=200;m=+2)
     {
      prime=true;
         k=int ( sqrt(m));                        //here is wrong,but i don't know the reason?
      for (i=2;i<=k;i++)
       if(m%i==0)
       {
       prime=false;
       
       break;
      //else prime=true;
       }
      
     }
     if(prime)
     {
      cout<<setw(5)<<m;
      n=n+1;
     }
     if(n%10==0)cout<<endl;
     //system("pause");
     return 0;
    }

     

    1>------ 已启动生成: 项目: sushu01, 配置: Debug Win32 ------
    1>  sushu.cpp
    1>d:\users\sunlu\documents\visual studio 2010\projects\sushu01\sushu01\sushu.cpp(12): error C2668: “sqrt”: 对重载函数的调用不明确
    1>          d:\program files\microsoft visual studio 10.0\vc\include\math.h(589): 可能是“long double sqrt(long double)”
    1>          d:\program files\microsoft visual studio 10.0\vc\include\math.h(541): 或       “float sqrt(float)”
    1>          d:\program files\microsoft visual studio 10.0\vc\include\math.h(127): 或       “double sqrt(double)”
    1>          尝试匹配参数列表“(int)”时
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    2010年11月27日 1:33

答案

  • 写成这样k=int (sqrt(float(m)));或者k=int (sqrt(double(m)));

    这样编译器才知道你要调哪个重载,是没有int sqrt(int)这样的函数的。

    你自己加一个int sqrt(int x){return sqrt(double(x));}这样的函数也是可以解决的。

    仅供参考:)


    0xBAADF00D
    2010年11月28日 14:24
    版主