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...
  • guosong421
  • guosong421
  • 2010年04月20日 09:58
  • 7738

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

来源:http://www.cnblogs.com/clever101        下面的一段代码: #include "stdafx.h" #include  c...
  • yang1994
  • yang1994
  • 2012年03月21日 15:27
  • 2110

对象引用前加const报错:不能将“this”指针从“const a”转换为“a

对象引用前加const报错:不能将“this”指针从“const a”转换为“a
  • cay22
  • cay22
  • 2010年07月02日 15:38
  • 9139

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

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

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

[c-sharp] view plaincopy class Point3d   {   public:       Point3d(float x=0.0,flo...
  • hezeshi
  • hezeshi
  • 2015年07月06日 14:12
  • 406

c++;对象引用前加const报错:不能将“this”指针从“const a”转换为“a &”

对象引用前加const报错:不能将“this”指针从“const a”转换为“a &” #include "stdafx.h"  #include using namespace std;...
  • wonengguwozai
  • wonengguwozai
  • 2016年08月20日 12:27
  • 500

【C++】不能将“this”指针从“const vector”转换为“vector & rhs"

最近在写STL,在对stack的swap函数进行测试的时候,出现了这个问题,由于是第一次见,我独自想了很久也有点迷糊,搜索调试弄了半天终于解决了,以下是出问题的代码: template ...
  • codedoctor
  • codedoctor
  • 2017年09月06日 17:26
  • 209

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

先看一下导致这个编译错误的例子:class COwnInt{public:int get();private:int m_n;};int COwnInt::get(){return m_n;}int ...
  • hustszh
  • hustszh
  • 2010年09月30日 17:59
  • 150

cannot convert parameter 1 from 'class A' to 'class A'

                             何志丹出错代码:class A {public:         A(){};private:         CStringArray x ...
  • he_zhidan
  • he_zhidan
  • 2007年04月12日 19:15
  • 2771

不能将this指针从“const type" 转换为"type &"

当在类中声明并定义了一个普通的公共成员函数,在主函数里定义了一个此类的常对象,如果试图使常对象调用非”常成员函数“就会产生如标题所说的:  error: 不能讲this指针从"const classt...
  • u013066145
  • u013066145
  • 2015年04月03日 14:36
  • 243
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’的解决办法
举报原因:
原因补充:

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