不能将“this”指针从“const CPaopao”转换为“CPaopao &

来源:互联网 发布:网络创业项目 编辑:程序博客网 时间:2024/06/07 19:26

   CPoint CPaopao::GetCenter()    {   return rc.CenterPoint();   }


     float CPaopao::Distance(const CPaopao& ortherPaopao){CPoint pt1=GetCenter();CPoint pt2=ortherPaopao.GetCenter();return Distance(pt1, pt2);}


出现如下错误:

error C2662: “CPaopao::GetCenter”: 不能将“this”指针从“const CPaopao”转换为“CPaopao &


原因:

ortherPaopao 为const 常量对象  ,由于const对象在调用成员函数的时候,会将this指针强制转换为const this,   所以它无法找到相应的const GetCenter()。

        而且,编译器也无法将一个const对象转换为一个普通对象来调用这个普通的GetCenter()方法,



解决方法:

            将GetCenter() 改为常量函数,类的常量成员函数的不会修改类的数据成员。

       因为const成员函数中不允许对数据成员进行修改,如果修改,编译器将报错,这大 大提高了程序的健壮性


   CPoint CPaopao::GetCenter() const   {   return rc.CenterPoint();   }


另附:

          const型成员函数不能调用非const成员函数

          因为 const成员函数是不会改变类的数据成员的值的 
          但是非const 成员 函数可能会改变的 
          因此 const 成员 函数是不能调用 非const 成员的。




0 0