double Triangle::area() const
{
double a = this->_points.at(0).distance(this->_points.at(1));
double b = this->_points.at(1).distance(this->_points.at(2));
double c = this->_points.at(2).distance(this->_points.at(0));
return ((sqrt((a + b + c)*(a + b - c)*(a - b + c)*(-a + b + c))) / (2*c));
}
我有这个const函数需要返回一个三角形的区域,我找到了一个适用于每种类型三角形的公式。
_points
是std::vector<Point>
,包含带有x
和y
参数的2D点。
我有distance()
函数给我两点之间的距离。
我不知道如何以另一种方式获得三角形区域,并且该功能必须是const,视觉工作室标记第一个&#34;这个&#34;在每一行中,它给了我这个问题:
const Triangle *const this
Error: the object has type qualifiers that are not compatible with the member function
object type is: const Point
Point
是具有distance()
功能以及x
和y
声明的类。
答案 0 :(得分:3)
至于你的澄清评论
&#34;
distance
函数不是const,但它得到一个(const&amp; Point)作为参数&#34;
在Point
成员函数
const
从矢量成员变量访问的const
值视为this->_points.at(1).distance(this->_points.at(2));
// ^^^^^^^^^^^^^
std::vector::at()
请参阅area()
reference documentation中的第二个签名,这个签名实际上是在Point
函数中调用的。
这最终要求double distance(const Point& pt) const;
// ^^^^^
类需要声明
double Triangle::area() const
成员签名,可以从Point::distance()
成员函数调用。
我认为您的Point
函数不会以任何方式更改const
实例,因此只需将const Triangle *const this
恰当地添加到签名中即可。
&#34;我不知道如何以另一种方式获得三角形区域,并且该功能必须是常量,视觉工作室标记第一个&#34;这个&#34 ;在每一行中,它给了我这个问题:&#34;
this
进一步深入解释:
Triangle *const
指针将被评估为
const
成员函数中的const Triangle *const
const
代表 Triangle
成员函数第一种形式允许修改mutable
的数据成员
第二种形式否认这一点,除非相关数据成员标记为const
。
两种表单(*
之后出现的this
)拒绝,您可以修改this = new Triangle();
指针本身(例如尝试类似{{1}})