C ++引用变量

时间:2010-04-23 06:25:24

标签: c++ reference compiler-errors

我有这两个函数(使用Point2D& LineVector(有2个Point2D成员变量)类和预定义的SQUARE宏)

inline float distance(const Point2D &p1,const Point2D &p2) {
    return sqrt(SQUARE(p2.getX()-p1.getX())+SQUARE(p2.getY()-p1.getY()));
}

inline float maxDistance(const LineVector &lv1,const LineVector &lv2) {
    return max(distance(lv1.p1,lv2.p2),distance(lv1.p2,lv2.p1));
}

但它在maxDistance()函数(第238行)中给出了编译错误:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_iterator_base_types.h: In instantiation of `std::iterator_traits<Point2D>':
quadrilateral.cpp:238:   instantiated from here
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_iterator_base_types.h:129: error: no type named `iterator_category' in `class 
Point2D'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_iterator_base_types.h:130: error: no type named `value_type' in `class Point2D
'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_iterator_base_types.h:131: error: no type named `difference_type' in `class Point2D'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_iterator_base_types.h:132: error: no type named `pointer' in `class Point2D'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_iterator_base_types.h:133: error: no type named `reference' in `class Point2D'

请说明错误是什么?

3 个答案:

答案 0 :(得分:0)

Point2D需要继承std::iterator才能与std :: distance完美匹配。 std::distance需要标准迭代器类型提供的一些typedef,以便使用正确的方法来测量距离。

编辑:我假设Point2D应该是一个迭代器。如果你假设std::distance是距离公式,那你就错了。 std::distance返回指向公共容器的两个迭代器之间的位置差异。

答案 1 :(得分:0)

看起来你可能正在调用std :: distance而不是你自己的距离函数。有可能发生这种情况的原因有几个,但通常是因为无偿使用

using namespace std;

在调用distance函数时尝试显式使用名称空间或类名,或者如果它在全局名称空间中

float result = ::distance(point1, point2);

答案 2 :(得分:0)

也许编译器将距离调用解释为std :: distance?在此代码之前是否使用了命名空间std?尝试重命名距离函数,看看会发生什么。