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

转载 2012年03月21日 15:27:11

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

 

     下面的一段代码:

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

class Point3d  
{  
public:  
    Point3d(float x=0.0,float y=0.0,float z=0.0)  
        :_x(x),_y(y),_z(z)  
    {  
    }  

    float GetX() {return _x;}  
    float GetY() {return _y;}  
    float GetZ() {return _z;}  

    inline std::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函数改为:

    float GetX() const{return _x;}  
    float GetY() const{return _y;}  
    float GetZ() const{return _z;} 

 

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

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


相关文章推荐

Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’

class Point3d{public: Point3d(float x=0.0,float y=0.0,float z=0.0) :_x(x),_y(y),_z(z) { } float Get...

The resolution of ERROR C2662: cannot convert 'this' pointer from "const Class-Type" to "Class&"

Preface:因为今天码代码时出现了this指针不匹配情况,故写下这篇备忘日志。同时第一次使用纯英文来尝试写,也就是练习英文写作能力。...

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

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

使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法

在网上搜索了很多答案都没有办法得到解决,当然这些办法都可以使得编译通过,例如通过CString.GetBuffer可以得到char*变量指向CString的首地址,但是多种方法在运行时进入xstrin...

关于VS2005的error C2664: cannot convert parameter 2 from 'const char [2]' to 'LPCWSTR

一、VS2005设置UNICODE或ASCII字符集问题 VS2005开发程序时,默认的字符集是Unicode。所以如果程序中使用字符常量一定要显示转换为Unicode型,否则编译时报错。 如果你...

error C2440: 'static_cast' : cannot convert from 'LRESULT (__thiscall CchatDlg::* )(CPoint)' to 'UI

出现这个错误的原因可是“人力不可抗拒”之原因造成的,因为旧版本的 ON_WM_NCHITTEST 宏使用了  UINT (__thiscall CWzButton::* )(CPoint);  类型的...
  • zmq5411
  • zmq5411
  • 2011年03月29日 15:16
  • 2329

error C2440: 'static_cast' : cannot convert from 'LRESULT (__thiscall CchatDlg::* )(CPoint)' to 'UI

出现这个错误的原因可是“人力不可抗拒”之原因造成的,因为旧版本的 ON_WM_NCHITTEST 宏使用了   UINT (__thiscall CWzButton::* )(CPoint); ...

FreeGLUT Tips: Resolve compile error C2664: cannot convert argument 2 from '_TCHAR *[]' to 'char **'

解决编译OpenGL/FreeGLUT应用程序时遇到的编译错误:error C2664

Error 1 error C2440: 'initializing' : cannot convert from 'wchar_t *' to 'char *'

VS2008下面将 CString转化为char* 的问题  使用CString的GetBuffer方法         CString origCString("...

svn: Can't convert string from 'UTF-8' to native encoding 的解决办法

http://www.leakon.com/archives/610  svn 版本库中有文件是以中文字符命名的,在 Linux 下 checkout 会报错: svn: Can't co...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)