关于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
- 关于C++ error C2662 cannot convert 'this' pointer from...
- Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’
- error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’
- error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’
- Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’的解决办法
- Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’
- Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’
- Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’
- The resolution of ERROR C2662: cannot convert 'this' pointer from "const Class-Type" to "Class&"
- cannot convert 'this' pointer from 'const cl
- cannot convert 'this' pointer from 'const class Rational' to 'class Rational &' 是什么意思
- find_if 仿函数错误:cannot convert 'this' pointer from 'const CActTaskData' to 'CActTaskData &'
- error C2440: '=' : cannot convert from 'void&n C语言
- 关于VS2005的error C2664: cannot convert parameter 2 from 'const char [2]' to 'LPCWSTR
- Visual C++:error C2664: 'GetModuleFileNameW' : cannot convert parameter 2 from 'char' to 'LPWCH'
- error C2662
- Error C2662
- error C2440: '=' : cannot convert from 'void *' to 'float (*)[3]'
- Android library projects cannot be launched.
- java正则表达式---简单的使用
- qemu-kvm-1.1.0源码中关于迁移的代码分析
- Android中怎么破解游戏之修改金币数
- 南阳理工OJ_题目456 邮票分你一半
- 关于C++ error C2662 cannot convert 'this' pointer from...
- 高手速成android开源项目【tool篇】
- Dom解析XMl文档
- ecshop将编辑器更换为kindeditor
- abap中内表和表的关联操作
- SEO原创文章怎么写
- JAVA环境变量JAVA_HOME、CLASSPATH、PATH
- 高手速成android开源项目【View篇】
- 一篇贴子让我如此悲哀