我在VS2005中編譯Vector3D類出現(xiàn)
error C2662: “Vector3D::dotP”: 不能將“this”指針從“const Vector3D”轉(zhuǎn)換為“Vector3D &”
怎么樣改正呢,這個(gè)類也是看到別人這樣寫的,編譯也沒有錯(cuò)誤。
#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;
};