从比较函数访问成员变量/getter
Posted
技术标签:
【中文标题】从比较函数访问成员变量/getter【英文标题】:Access member variables/getters from comparison function 【发布时间】:2013-11-17 07:08:42 【问题描述】:我基本上是在尝试编写比较器函数,以按升序和降序排列对象 P1 和 Pt2 的 x 和 y 值。
现在我遇到了一个错误,即 x 和 y 受到保护,但是如何在排序中正确使用 getter? 我还是很困惑。我尝试使用它,但不起作用。
bool Line2D::sortLine2DPtAsc (const Point2D& left, const Point2D& right)
return (left.pt1.getX() < right.pt1.getX()) || ((left.pt1.getX() == right.pt1.getX()) && (left.pt1.getY() < right.pt1.getY()));
使用 getter 时出错:
Line2D.cpp:25:15: error: ‘const class Point2D’ has no member named ‘pt1’
Line2D.cpp:25:34: error: ‘const class Point2D’ has no member named ‘pt1’
Line2D.cpp:25:56: error: ‘const class Point2D’ has no member named ‘pt1’
Line2D.cpp:25:76: error: ‘const class Point2D’ has no member named ‘pt1’
Line2D.cpp:25:97: error: ‘const class Point2D’ has no member named ‘pt1’
Line2D.cpp:25:116: error: ‘const class Point2D’ has no member named ‘pt1’
这是我的代码:
class Line2D
private:
Point2D pt1;
Point2D pt2;
public:
//Constructor
Line2D ();
Line2D (Point2D pt1, Point2D pt2);
//Accessors
Point2D getPt1();
Point2D getPt2();
double getScalarValue(); //returns the value of attribute length
//Mutators
void setPt1 (Point2D pt1);
void setPt2 (Point2D pt2);
static bool sortLine2DPtAsc (const Point2D& left, const Point2D& right) ;
bool Line2D::sortLine2DPtAsc (const Point2D& left, const Point2D& right)
return (left.x < right.x) || ((left.x == right.x) && (left.y < right.y));
【问题讨论】:
今天显然是一个模棱两可的“它不起作用”问题的日子,没有详细说明这意味着什么。不编译?不像你想要的那样排序?挂起?崩溃?我打赌保罗的答案是正确的,你应该看看它。请更具体,特别是如果它是编译器或运行时 error 消息,在这种情况下,请在您的问题中包含 entire 消息 verbatim。 你去。优秀的留言。那么我能问一下什么是可能令人尴尬的问题吗?您要排序的点集合是什么?除非我弄错了,否则您正在对Line2D
对象的集合进行排序,对吗?每个都有两点?这可以解释很多。
@WhozCraig 我已修改为 bool Line2D::sortLine2DPtAsc (const Line2D& left, const Line2D& right) 并成功编译。谢谢。
【参考方案1】:
使用带有 getter 的版本,但将 left.pt1.getX()
替换为 left.getX()
等。
我猜在你的Point2D
课程中,你需要改变
double getX();
到
double getX() const;
getY
也是如此。
通过const Point2D& left, const Point2D& right
,您有合同不得修改这些对象中的任何值。您只能调用声明为const
的成员函数(它们不会更改对象)。
【讨论】:
您可以进一步假设getY()
处于类似的困境中。
如果不是很明显,+1。
查看帖子中的更新代码和错误消息。永远不会看到那个的到来。
@WhozCraig,我更新了我的答案。感谢您要求澄清。【参考方案2】:
bool Line2D::sortLine2DPtAsc (const Point2D& left, const Point2D& right)
你的参数是 Point2D
类型的,也许你想让它们的类型是 Line2D
如果函数是排序线,你为什么要传递它点;)pt1
和 pt2
是 Line2D
类的成员,而不是你的 Point2D
类
【讨论】:
以上是关于从比较函数访问成员变量/getter的主要内容,如果未能解决你的问题,请参考以下文章
C++ - 在内部,当定义一个类的成员函数时,应该使用成员变量名称还是它的 getter 函数?
成员变量/方法/ getter和setter是否可以包含在一个公共访问修饰符中?