我在这个问题上花了大约两个小时,我之前访问过这些 stackoverflow 问题:
两者都没有帮助我,所以我在这里指定我的问题:
1)我有一个将 sPolygon
存储Point2D
在列表中的类。该类有两个成员函数:
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
函数的返回值findClosestPts
。我需要那个,因为函数需要返回两个点和一个距离:
struct Tripel {
Point2D pt1;
Point2D pt2;
float dist;
};
现在问题出在 Polygon.cpp 的实现中。这是我上面提到的两个函数的(当前)代码:
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,在将三个 std::vectors 传递给另一个函数之前使其成为 const ......但一切都导致(不同的)编译错误。
所以我的问题是,我需要如何编写这两个函数来实现以下目标:我想要一个函数closestPoints()
,它是一个公共成员函数,它返回两个最近点的对。为此,它需要一个辅助的私有成员函数findClosestPts(vector1, vector2, vector3)
来返回上述struct Triple
?
我会很高兴得到帮助,因为我被困在这里有一段时间了:/