【问题标题】:Access member variables/getters from comparison function从比较函数访问成员变量/getter
【发布时间】: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) 并成功编译。谢谢。

标签: c++ sorting vector comparator accessor


【解决方案1】:

使用带有 getter 的版本,但将 left.pt1.getX() 替换为 left.getX() 等。

我猜在你的Point2D 课程中,你需要改变

double getX();

double getX() const;

getY 也是如此。

通过const Point2D&amp; left, const Point2D&amp; right,您有合同不得修改这些对象中的任何值。您只能调用声明为const 的成员函数(它们不会更改对象)。

【讨论】:

  • 您可以进一步假设getY() 处于类似的困境中。
  • 如果不是很明显,+1。
  • 查看帖子中的更新代码和错误消息。永远不会看到那个的到来。
  • @WhozCraig,我更新了我的答案。感谢您要求澄清。
【解决方案2】:

bool Line2D::sortLine2DPtAsc (const Point2D&amp; left, const Point2D&amp; right)
你的参数是 Point2D 类型的,也许你想让它们的类型是 Line2D
如果函数是排序线,你为什么要传递它点;)
pt1pt2Line2D 类的成员,而不是你的 Point2D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2021-12-06
    • 2023-03-23
    • 2021-02-04
    • 2022-01-03
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多