关于C++ error C2662 cannot convert 'this' pointer from...

来源:互联网 发布:h3c数据中心网络认证 编辑:程序博客网 时间:2024/05/18 14:13

做一个很简单的C++ 实验,竟然报错疑问

以下为程序代码,写一个圆类,实现运算符重载。

头文件:Circle.h

#ifndef CIRCLE_H#define CIRCLE_Hclass Circle{public:Circle():PI(3.14) {}Circle(double radius):PI(3.14){this->radius=radius;}double getRadius() {return radius;}void setRadius(double radius){this->radius=radius;}double getArea() const{return PI*radius*radius;}bool operator<(const Circle& c);bool operator<=(const Circle& c);bool operator==(const Circle& c);bool operator!=(const Circle& c);bool operator>(const Circle& c);bool operator>=(const Circle& c);void operator=(const Circle& c) {radius=c.getRadius();}private:double radius;const double PI;};#endif
实现文件 Circle.cpp

#include"Circle.h"bool Circle::operator<(const Circle& c){return radius<c.getRadius();}bool Circle::operator<=(const Circle& c){return radius<=c.getRadius();}bool Circle::operator==(const Circle& c){return radius==c.getRadius();}bool Circle::operator!=(const Circle& c){return radius!=c.getRadius();}bool Circle::operator>(const Circle& c){return radius>c.getRadius();}bool Circle::operator>=(const Circle& c){return radius>=c.getRadius();}
测试文件main.cpp

#include"Circle.h"#include<iostream>#include<algorithm>#include<vector>#include<string>using namespace std;int main(){vector<Circle> vec;int n,i;cout<<"Please input the number of circles:"<<endl;cin>>n;cout<<"Please input the radius of circles(eg.1 2 3 4 5 6...):"<<endl;for(i=0;i<n;++i){double r;cin>>r;vec.push_back(Circle(r));}sort(vec.begin(),vec.end());cout<<"after sorted:"<<endl;for(i=0;i<vec.size();++i)cout<<"Circle("<<vec[i].getRadius()<<')'<<' ';cout<<endl;return 0;}

在VC6下测试,报以下错误

无奈之下,百度之,得知问题根源在于头文件的get函数

double getRadius() {return radius;}

由于Circle.cpp文件中实现运算符重载的函数中形式参数为const Circle&类型,const对象在调用成员函数时,会将this指针强制转换成const this指针,本例中,形式参数中的c对象会找成员函数中对应的const类型 getRadius函数,而编译器无法将非const类型的getRadius函数转换成const类型的getRadius函数,因此出现编译错误。

解决方法:

将getRadius成员函数改为

double getRadius() const{return radius;}
即可,或将Circle.cpp文件中的形式参数改为Circle& c。




0 0
原创粉丝点击