不能将“this”指针从“const Vector3D”转换为“Vector3D &" 错误

在VS2005中,编译Vector3D类时遇到错误C2662,原因在于const成员函数尝试调用非const成员函数dotP。解决方案是将dotP函数声明为const,即`double dotP(const Vector3D& v1, const Vector3D& v2) const;`这样可以确保在const上下文中正确工作。" 50441867,935926,JavaScript实现手机号码中间四位用星号隐藏,"['javascript', 'jquery']

不能将“this”指针从“const Vector3D”转换为“Vector3D &" 错误

我在VS2005中编译Vector3D类出现
error C2662: “Vector3D::dotP”: 不能将“this”指针从“const Vector3D”转换为“Vector3D &”

怎么样改正呢,这个类也是看到别人这样写的,编译也没有错误。

#pragma once

#define M_PI 3.141
#include <math.h>

class Vector3D{
 Vector3D(){x=y=z=0.0;}
 Vector3D(double vx, double vy,double vz=0.0){
  x = vx;
  y = vy;
  z = vz;
 }
 
 double magnitude() const{
  return sqrt(x*x+y*y+z*z);
 }

 double dotP(const Vector3D& v1,const Vector3D& v2){
  return (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z);
 }

 // get the vector angle
 double angle() const{
  double ret = 0.0;
  double m = magnitude();

  if (m>1.0e-6) {

// 问题出在这里!!!!
// ==============================
   double dp = dotP(*this,Vector3D(1.0,0.0));
//==============================

   if (dp/m>=1.0) {
    ret = 0.0;
   }
   else if (dp/m<-1.0) {
    ret = M_PI;
   }
   else {
    ret = acos( dp / m);
   }
   if (y<0.0) {
    ret = 2*M_PI - ret;
   }
  }
  return ret;
 }


protected:
 double x;
 double y;
 double z;

};#pragma once

#define M_PI 3.141
#include <math.h>

class Vector3D{
 Vector3D(){x=y=z=0.0;}
 Vector3D(double vx, double vy,double vz=0.0){
  x = vx;
  y = vy;
  z = vz;
 }
 
 double magnitude() const{
  return sqrt(x*x+y*y+z*z);
 }

 double dotP(const Vector3D& v1,const Vector3D& v2){
  return (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z);
 }

 // get the vector angle
 double angle() const{
  double ret = 0.0;
  double m = magnitude();

  if (m>1.0e-6) {
   double dp = dotP(*this,Vector3D(1.0,0.0));

   if (dp/m>=1.0) {
    ret = 0.0;
   }
   else if (dp/m<-1.0) {
    ret = M_PI;
   }
   else {
    ret = acos( dp / m);
   }
   if (y<0.0) {
    ret = 2*M_PI - ret;
   }
  }
  return ret;
 }


protected:
 double x;
 double y;
 double z;

};

posted on 2006-05-10 14:42 Beginning to 编程 阅读(791) 评论(2)  编辑 收藏 引用 所属分类: 关键代码

评论

# re: 不能将“this”指针从“const Vector3D”转换为“Vector3D &" 错误 2006-05-10 21:50 史传红

原因不是*this不能转换成const vector3D&,而是常成员函数(double angle() const)不能调用 非 常成员函数(double dotP(const Vector3D& v1,const Vector3D& v2)),如果把dotp改成如下定义:double dotP(const Vector3D& v1,const Vector3D& v2) const.
问题就解决了.  回复  更多评论   

# re: 不能将“this”指针从“const Vector3D”转换为“Vector3D &" 错误 2006-05-11 11:59 nico

double dotP(const Vector3D& v1,const Vector3D& v2) const
{
return (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z);
}
  回复  更多评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值