c++程序出错了,哪位大神帮帮我

#include<iostream>
#include<math.h>
using namespace std;
class point
{
private:
int x;
int y;
public:
point(int a,int b)
{
x=a;
y=b;
}
friend double distance (point p1,point p2);
};
double distance(point p1,point p2)
{
double d;
d=pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2);
return sqrt(d);
}
int main()
{
point p1(3,4),p2(0,0);
cout<<"两点之间的距离为:"<<distance(p1,p2)<<endl;
return 0;
}
错误
f:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator_base_types.h||In instantiation of 'struct std::iterator_traits<point>':|
f:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator_base_funcs.h|114| required by substitution of 'template<class _InputIterator> typename std::iterator_traits::difference_type std::distance(_InputIterator, _InputIterator) [with _InputIterator = point]'|
F:\c语言练习\zuoye\main.cpp|26|required from here|
f:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator_base_types.h|166|error: no type named 'iterator_category' in 'class point'|
f:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator_base_types.h|167|error: no type named 'value_type' in 'class point'|
f:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator_base_types.h|168|error: no type named 'difference_type' in 'class point'|
f:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator_base_types.h|169|error: no type named 'pointer' in 'class point'|
f:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_iterator_base_types.h|170|error: no type named 'reference' in 'class point'|
||=== 生成完成: 6 错误, 2 警告 (0 分, 2 秒) ===|

注意看出错信息


In instantiation of 'struct std::iterator_traits<point>':|

说明在提到的头文件stl_iterator_base_types.h当中还有一个也叫point的类

把你的类改个名字吧

比如改成Point

那么就是

#include<iostream>
#include<math.h>
using namespace std;
class Point
{
private:
    int x;
    int y;
public:
    Point(int a,int b)
    {
        x=a;
        y=b;
    }
    friend double distance (Pointp1,Pointp2);
};
double distance(Pointp1,Point p2)
{
    double d;
    d=pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2);
    return sqrt(d);
}
int main()
{
    Point p1(3,4),p2(0,0);
    cout<<"两点之间的距离为:"<<distance(p1,p2)<<endl;
    return 0;
}

试试吧 其他的没什么问题 函数同名没关系 参数不同就可以 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-27
凭经验感觉你的提供的代码没问题,但是你可能在其它地方把point作为了模板形参或者系统内存在point的类型。建议你先把自己的point命名为point_tmp_2014_10_27 再编译试试看还报什么错误。
第2个回答  2014-10-27
distance函数重新命名 这个函数和std::distance()重名 把你的distance重新写个名字
第3个回答  2014-10-26
源码呢?
第4个回答  2014-10-26
我发现using namespace std跟.h效果重复,把.h去掉