如何将常量函数与"this"一起使用
how can i use a const function with "this"
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
是一个包含具有x
和y
参数的 2D 点的std::vector<Point>
。
我有一个distance()
函数,可以给我两点之间的距离。
我不知道如何以另一种方式获取三角形的面积,函数必须是常量,视觉工作室在每行中标记第一个"this",它给了我这个问题:
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
声明的类。
至于你的澄清评论
"
distance
函数不是常量,但它得到一个(常量和点(作为参数">
从向量成员变量访问的Point
值必须const
出现在 const
成员函数中的代码中考虑
this->_points.at(1).distance(this->_points.at(2));
// ^^^^^^^^^^^^^
请参阅std::vector::at()
参考文档中的第二个签名,这个签名实际上是在您的area()
函数中调用的。
这最终要求Point
类需要声明一个
double distance(const Point& pt) const;
// ^^^^^
成员签名,可以从double Triangle::area() const
成员函数调用它。
我想您的Point::distance()
函数不会以任何方式更改Point
实例,因此完全可以,只需适当地将const
添加到签名中即可。
">我不知道如何以另一种方式获取三角形的面积,函数必须是恒常的,视觉工作室在每行中标记了第一个"this",它给了我这个问题:">
const Triangle *const this
为了更深入地解释:
this
指针的计算结果为
- 非
const
成员函数中的Triangle *const
-
const
成员函数的const Triangle *const
第一种形式允许修改Triangle
的数据成员。
第 2 种形式否认这一点,除非有问题的数据成员被标记为 mutable
。
两种形式(*
后面出现的const
(都拒绝,您可以修改this
指针本身(例如尝试类似this = new Triangle();
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- C++错误:"error: int aaa::bbb is protected within this context"
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 将 std::allocate_shared 与多态资源分配器一起使用
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 为什么我不能将"->"与"this"和"[ ]"一起使用?
- 如何将常量函数与"this"一起使用
- C++:将'this'指针与"get"函数一起使用以替换 cout 语句的可能性
- 由 sf::P acket 定义的运算符<<是否与 sf::P acket 派生类的 (*this) 一起工作?