2010-08-24 68 views
-1

我想实现一个最近点的程序。下面是代码:最近的点执行

#include <iostream> 
#include <cstdlib> 
#include <math.h> 
using namespace std; 

float randfloat(){ 
    return 1.0*rand()/RAND_MAX; 
} 

class point 
{ 
    public : 
    float x,y; 

    float distance(point& a){ 
     float dx=x-a.x; 
     float dy=y-a.y; 
     return sqrt(dx*dx+dy*dy); 
    } 
}; 

int main(int argc,char* argv[]){ 
    int i,cnt=0; 
    int n=atoi(argv[1]); 
    float d=atof(argv[2]); 
    point *a=new point[n]; 
    for (int i=0;i<n;i++) 
    { 
     a[i].x=randfloat(); 
     a[i].y=randfloat(); 
    } 
    for (i=0;i<n;i++) 
     for (int j=i+1;j<n;j++) 
      if ((distance(a[i],a[j])<d)) cnt++; 
    cout << cnt << "pairs within" << d << endl; 

    return 0; 
} 

但是,当我在命令行编译它给出这样的错误:

指针不在基类点的构件

这里是完整列表:

C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C 
2039: 'iterator_category' : is not a member of 'point' 
     closet_point.cpp(9) : see declaration of 'point' 
     closet_point.cpp(37) : see reference to class template instantiation 'st 
d::iterator_traits<_Iter>' being compiled 
     with 
     [ 
      _Iter=point 
     ] 
C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C 
2146: syntax error : missing ';' before identifier 'iterator_category' 
C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C 
4430: missing type specifier - int assumed. Note: C++ does not support default-i 
nt 
C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C 
2602: 'std::iterator_traits<_Iter>::iterator_category' is not a member of a base 
class of 'std::iterator_traits<_Iter>' 
     with 
     [ 
      _Iter=point 
     ] 

我该如何解决这个问题?

+1

对不起,但你确实知道衣橱是什么,对吧?有趣的是,你甚至可以在cpp文件中输入错字:)你可能想纠正这个问题。 除此之外,我认为代替距离(a [i],a [j])它应该是[i] .distance(a [j]) – humbagumba 2010-08-24 08:23:20

回答

2

我相信你使用了错误的distance()函数。我相信您的意思

a[i].distance(a[j])

,而不是

distance(a[i],a[j])

1

你应该叫一个成员函数形式

a[i].distance(a[j]) 

你所看到的问题是因为有一个内置函数distance(),它需要两个迭代器。由于point不是迭代器,编译器吐出这些听起来完全不相关的错误。

(顺便说一句,因为.distance()不修改参数,更好的声明为float distance(const point& a) const。)

1

因为你宣布你distancepoint成员函数,你应该叫它

  if ((a[i].distance(a[j])<d)) cnt++; 

否则它会尝试导致错误消息的std::distance