私はその問題に約2時間費やしました、そして私は以前にこれらのスタックオーバーフローの質問にアクセスしました:
どちらも役に立たなかったので、ここで問題を特定しています。
1)sをリストにPolygon
格納するクラスがあります。Point2D
このクラスには、特に2つのメンバー関数があります。
public:
std::pair<Point2D,Point2D> closestPts() const;
private:
Tripel const& findClosestPts (std::vector<Point2D> const& P,
std::vector<Point2D> const& X,
std::vector<Point2D> const& Y) const;
2)クラスにstruct Triple
は、関数の戻り値であるaも含まれていますfindClosestPts
。関数は2つのポイントと1つの距離を返す必要があるため、これが必要です。
struct Tripel {
Point2D pt1;
Point2D pt2;
float dist;
};
問題は現在、Polygon.cppの実装にあります。これは、上記の2つの関数の(現在の)コードです。
std::pair<Point2D,Point2D> Polygon::closestPts() const {
...
int size = m_points.size();
std::vector<Point2D> P (size);
std::vector<Point2D> X (size);
std::vector<Point2D> Y (size);
...
// some manipulation of the vectors, filling them with Point2D
// at this point, I have three non-const std::vector<Point2D>
// try to call the other function
Tripel closPts = findClosestPts(P, X, Y);
...
}
Tripel const& findClosestPts (std::vector<Point2D> const& P, std::vector<Point2D> const& X, std::vector<Point2D> const& Y) const {
...
}
コンパイラエラーは次のとおりです。
error: non-member function 'const Tripel& findClosestPts(...)' cannot have cv-qualifier
したがって、この関数を作成することは許可されていないと思います。const
これは、を返すためstruct
です。本当?
とにかく、私は関数のシグネチャをこれに変更しました:
Tripel const& findClosestPts (std::vector<Point2D> const& P,
std::vector<Point2D> const& X,
std::vector<Point2D> const& Y);
したがって、関数はもうありませconst
ん。これにより、次のコンパイルエラーが発生します。
error: passing 'const Polygon' as 'this' argument of 'const Tripel& Polygon::findClosestPts(...)' discards qualifiers [-fpermissive]
わからない、今何をすべきか。私はほとんどすべてを試し、すべてのconstステートメントを削除し、それらを変更し、findClosestPts
公開し、再びconstにし、3つのstd :: vectorを他の関数に渡す前にconstにしました...しかし、すべてが(異なる)コンパイルにつながりましたエラー。
したがって、私の質問は、次のことを実現するために、2つの関数をどのように記述する必要があるかということclosestPoints()
です。パブリックメンバー関数であり、最も近い2つのポイントのペアを返す関数が必要です。findClosestPts(vector1, vector2, vector3)
そのためには、上記のを返す補助的なプライベートメンバー関数が必要struct Triple
ですか?
私はしばらくの間ここで立ち往生しているので、私は助けに満足しているでしょう:/