1

クラス Point を定義しました。クラス PointCollection もあります。class PointCollection: public QVector<Point>ここでいくつかのメソッドを実装すると、次のエラーが発生します。

エラー: 'operator==' に一致しません (オペランド タイプは 'Point' と 'const Point' です)

このエラーが発生したコード部分は次のとおりです。

    Point PointCollection::getNearestPointToCentroid()
{
    float minDist = 0.0;
    int NearestPointToCentroidIndex = -1;
    while(!this->empty())
    {
        Point point;
        Point centroid;
        float dist = PointT.calculateEuclideanDist(point, centroid);
        if(this->indexOf(point) == 0)
        {
            minDist = dist;
            NearestPointToCentroidIndex = this->indexOf(point);
        }
        else
        {
            if(minDist > dist)
            {
                minDist = dist;
                NearestPointToCentroidIndex = this->indexOf(point);
            }
        }
    }
    return(this[NearestPointToCentroidIndex]);
}

ここで:Point centorid;float X;float Y;int Id;は PointCollection クラスのプライベート変数です。コンストラクターで次を定義します。

PointCollection::PointCollection()
{
    //centorid = new Point;
    Id = PointT.GetId();
    X = PointT.GetX();
    Y = PointT.GetY();
}

float Point::calculateEuclideanDist(Point point_1, Point point_2)
{
    float x1 = point_1.x, y1 = point_1.y;
    float x2 = point_2.x, y2 = point_2.y;

    float dist = qSqrt(qPow(x2 - x1, 2.0) + qPow(y2 - y1, 2.0));


    return (dist);
 }
4

1 に答える 1

2

問題は、indexOf を実装するために、QVector が Points を比較して等しいかどうかを知る必要があることです (そうでなければ、どうやってベクトル内の点を見つけることができますか)。これには operator== を使用していますが、クラス Point に operator== を記述していないため、このエラーが発生します。Point に operator== と書くだけです (そして operator!= も良い考えです)。

bool operator==(const Point& x, const Point& y)
{
    // your code here
}

bool operator!=(const Point& x, const Point& y)
{
    return !(x == y);
}
于 2013-08-20T18:38:12.937 に答える