c++ 将“const hlp 2::Point”作为“this”参数传递将丢弃限定符[-fpermissive]

eqfvzcg8  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(133)

我遇到了重载[]运算符的问题,并且在编译代码时遇到了问题。
过载定义double& Point::operator[](int index) { return index ? y : x; }
类Point '类Point { public://声明构造函数(3)Point();

Point(double * arr);

//Point(double x_input, double y_input);

Point(const Point& input);

Point(const double x_input, const double y_input);

// declare overloaded operators (8 member functions)
double& operator[](int index);

Point operator+=(double num);

Point operator+=(const Point& pointee);

Point operator++(int);

Point operator++();

Point operator--(int);

Point operator--();

私有:双x;//一个点的x坐标乘以y;//点的y坐标};'
错误:error
我不知道为什么我会遇到这个问题,我希望如果有人能阐明一些正在发生的事情。提前谢谢你。
我试过将const添加到重载及其返回类型中,但没有效果。

mqkwyuun

mqkwyuun1#

该错误消息意味着为Point类型的常量对象调用了operator [],但该运算符未声明为常量成员函数。
向运算符再添加一个重载

// declare overloaded operators (8 member functions)
double& operator[](int index);
const double& operator[](int index) const;

如果运算符是在类定义之外的全局命名空间中定义的,则需要编写

const double& hlp2::Point::operator[](int index) const
{
    //,,,
}

如果运算符是在定义类的同一命名空间中定义的,则将

const double& Point::operator[](int index) const
{
    //,,,
}

简单地说,定义它就像定义非常数运算符一样。

相关问题