新手求教:VS2010编译C++程序出错

时间:2023-02-22 10:36:37
C++代码:(求素数)
#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;
void main()
{
int i,j,k=2;
cout<<setw(8)<<2<<setw(8)<<3;
for(i=2;i<=300;i++)
for(j=2;j<sqrt(i);j++)
{
if(i%j==0)break;
if(j>sqrt(i))
{
cout<<setw(8)<<i;
k++;
if(k%5==0)cout<<'\n';
}
}
cout<<'\n';
}
VS2010编译后显示错误:

1、error C2668: “sqrt”: 对重载函数的调用不明确 e:\c++\1\1\1.cpp
2、error C2668: “sqrt”: 对重载函数的调用不明确 e:\c++\1\1\1.cpp
3、IntelliSense: 有多个 重载函数 "sqrt" 实例与参数列表匹配: e:\c++\1\1\1.cpp
4、IntelliSense: 有多个 重载函数 "sqrt" 实例与参数列表匹配: e:\c++\1\1\1.cpp



7 个解决方案

#1


#include<math.h>  是不是应该写成#include<math>

#2


把 i 强制转换下

#3



#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
void main()
{
int i,j,k=2;
cout<<setw(8)<<2<<setw(8)<<3;
for(i=2;i<=300;i++)
for(j=2;j<sqrt((double)i);j++)
{
if(i%j==0)
break;
if(j>sqrt((double)i))
{
cout<<setw(8)<<i;
k++;
if(k%5==0)cout<<'\n';
}
}
cout<<'\n';
}

#4


VS2010 提供了精确地类型配匹配需要强制转换 sqrt只是针对float和double以及long double重载了

#5


#include<cmath>

#6


将i转为long型

#7


引用 4 楼 hnuqinhuan 的回复:
VS2010 提供了精确地类型配匹配需要强制转换 sqrt只是针对float和double以及long double重载了
ok
需要强制转换

#1


#include<math.h>  是不是应该写成#include<math>

#2


把 i 强制转换下

#3



#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
void main()
{
int i,j,k=2;
cout<<setw(8)<<2<<setw(8)<<3;
for(i=2;i<=300;i++)
for(j=2;j<sqrt((double)i);j++)
{
if(i%j==0)
break;
if(j>sqrt((double)i))
{
cout<<setw(8)<<i;
k++;
if(k%5==0)cout<<'\n';
}
}
cout<<'\n';
}

#4


VS2010 提供了精确地类型配匹配需要强制转换 sqrt只是针对float和double以及long double重载了

#5


#include<cmath>

#6


将i转为long型

#7


引用 4 楼 hnuqinhuan 的回复:
VS2010 提供了精确地类型配匹配需要强制转换 sqrt只是针对float和double以及long double重载了
ok
需要强制转换