不能將“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);
}
回覆 更多評論