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

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

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

头文件:Circle.h

#ifndef CIRCLE_H
#define CIRCLE_H

class 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(const Circle& c)
{
	return radius>c.getRadius();
}

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

#include"Circle.h"
#include
#include
#include
#include
using namespace std;

int main()
{
	vector vec;
	int n,i;
	cout<<"Please input the number of circles:"<>n;
	cout<<"Please input the radius of circles(eg.1 2 3 4 5 6...):"<>r;
		vec.push_back(Circle(r));
	}
	sort(vec.begin(),vec.end());
	cout<<"after sorted:"<

在VC6下测试,报以下错误

关于C++ error C2662 cannot convert 'this' pointer from..._第1张图片

无奈之下,百度之,得知问题根源在于头文件的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。




你可能感兴趣的:(C++)