不能将“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);
}
回复 更多评论
相关文章推荐
- 【C++】不能将“this”指针从“const vector”转换为“vector & rhs"
- 不能将this指针从“const type" 转换为"type &"
- 不能将“this”指针从“const CPaopao”转换为“CPaopao &
- [error] MFC错误不能将参数1从"const char [3]"转换为"const wchar_t *"
- error C2662: 不能将“this”指针从“const Node_align”转换为“Node_align &”解决方案
- C++ error C2662: “LinkNode<T> *List<T>::Locate(int)”: 不能将“this”指针从“const List<int>”转换为“List<int> &”
- 基类代码error C2662: 不能将“this”指针从“const Node_align”转换为“Node_align &”解决方案
- c++;对象引用前加const报错:不能将“this”指针从“const a”转换为“a &”
- 不能将“this”指针从“const Vehicle”转换为“Vehicle &”
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- 使用了<input type="submit" value="Submit" onclick="this.disabled=true" />不能提交
- 从"void*"到指向非"void"的指针的转换要求显式类型转换错误
- 写Filter中编译出现的错误,无法解析的外部符号 "public: __thiscall CTransformFilter::CTransformFilter
- XP出现"内存不能read "的错误原因之一
- IIS7错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")......
- 不能将参数 1 从“int &(__thiscall RBTree<T>::* )(RBTreeNode<T> *)”转换为“int &(__cdecl *)(RBTreeNode<T> *)”
- 对象引用前加const报错:不能将“this”指针从“const a”转换为“a
- 1.android入门不能忽视的问题之出现“ClassNotFoundException: Didn't find class "...Activity" on path: DexPathLis”错误
- [解决问题][不能更新eclipse]错误提示:Error retrieving "feature.xml". [error in opening zip file]
- SQL2005错误:"已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行. "解决方法