Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’的解决办法...

本文介绍了一段C++代码在VS2005编译器下出现的关于const限定符导致的错误,并提供了两种解决方案:一是修改成员函数为const兼容;二是使用const_cast去除const限定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:http://www.cnblogs.com/clever101

下面的一段代码:

#include " stdafx.h "
#include<iostream>

classPoint3d
{
public:
Point3d( floatx= 0.0, floaty= 0.0, floatz= 0.0)
:_x(x),_y(y),_z(z)
{
}

floatGetX(){ return_x;}
floatGetY(){ return_y;}
floatGetZ(){ return_z;}

inlinestd::ostream& operator<<(std::ostream& out) const
{
out<<GetX()<< " "<<GetY()<< " "<<GetZ()<<std::endl;

return out;
}

private:
float_x,_y,_z;
};

VS C++2005编译出现下面错误:

1>d:\algorithmic\searchnum\console\console.cpp(21) : error C2662:“Point3d::GetX”: 不能将“this”指针从“const Point3d”转换为“Point3d &”

1>转换丢失限定符

1>d:\algorithmic\searchnum\console\console.cpp(21) : error C2662:“Point3d::GetY”: 不能将“this”指针从“const Point3d”转换为“Point3d &”

1>转换丢失限定符

1>d:\algorithmic\searchnum\console\console.cpp(21) : error C2662:“Point3d::GetZ”: 不能将“this”指针从“const Point3d”转换为“Point3d &”

原因在于带const修饰符的接口会把this指针转化为为const this类型。网上一种解决办法是,把需要调用的非const接口都改为const,如上例的GetX、GetY和GetZ函数改为:

floatGetX() const{ return_x;}
floatGetY() const{ return_y;}
floatGetZ() const{ return_z;}

我想到的一种办法是可以直接在内部将const修饰符去掉,具体如下:

out<<(const_cast<Point3d*>( this))->GetX()<< " "<<(const_cast<Point3d*>( this))->GetY()<< " "<<(const_cast<Point3d*>( this))->GetZ()<<std::endl;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值