我有一个简单的点类:
class Point { public: Point(const double, const double); /** This constructor creates invalid point instance **/ Point(); ~Point(); const double x; const double y; /** This returns true if one of the values is NaN **/ bool isInvalid() const; /** Returns true if coordinates are equal **/ bool equal(const Point& p) const; };
价值观x
和y
是const
这样,我可以肯定,他们永远不会改变.他们应该永远不变.问题是我无法分配给变量持有Point
:
Point somePoint; ... meanwhile, things happen ... //ERROR: use of deleted function 'Point& Point::operator=(const Point&)' somePoint = Point(x, y);
我知道分配是一个问题因为somePoint.x = something
被禁止.我需要在渲染过程中使用point来保持最后一个点值:
Point lastPoint; PointInGraph* point = graphValues.last; while((point = point->next())!=nullptr) { // calculate pixel positions for point double x,y; ... if(!lastPoint.isInvalid()) drawer.drawLine(round(lastPoint.x), round(lastPoint.y), round(x), round(y)); // ERROR: use of deleted function 'Point& Point::operator=(const Point&)' lastPoint = Point(x, y); }
那么const
在类属性中也可以简单地创建该类类型的任何变量const
吗?或者有解决方法吗?
这是不可能的.它需要修改const
值.
而不是制造x
和y
自己const
,使它们不是,而是为它们const
提供const
接口,即通过使它们成为私人并提供const
吸气剂.