您的位置:首页 > 其它

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

2009-03-05 19:09 435 查看


不能将“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);

}

回复 更多评论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐