【发布时间】:2013-03-11 16:59:33
【问题描述】:
我写了一个小的 3d 矢量类。特别是我写了两个函数,一个用于旋转向量,一个用于返回向量本身的旋转副本。所以我有以下内容:
Vector Vector::Rotate(const double angle, Vector& axis) const {
Vector b=*this;
b.Rotate(angle,axis);
return (b);
}
void Vector::Rotate(const double angle, Vector & axis) {
/* let's promote this vector to a quaternion */
Quaternion V (0,*this);
/* quaternion describing the rotation */
Quaternion q (cos(angle/2),axis*sin(angle/2));
/* actual rotation */
*this = (q*V*q.conjugate()).Vec();
}
现在,当我写这样的东西时:
vector2 = vector1.Rotate(rbo::M_PUCKER,i);
我得到错误: 没有运算符“=”匹配这些操作数 操作数类型为:Vector = void
我希望编译器能够理解我想要什么:为什么他选择 void 版本而不是另一个返回向量的版本?此外,按照我的方式编写更多版本的相同功能是一种好习惯吗?
【问题讨论】:
-
好的做法? 没有。语义真的很混乱。明确函数的作用。
标签: c++ compiler-construction overloading