【发布时间】:2010-09-28 03:28:05
【问题描述】:
我有一个带有正确重载的 Vect*float 运算符的向量类,我正在尝试创建全局/非成员 float*Vect 运算符,如下所示:(注意这是一个经过大量编辑的示例)
class Vect
{
public:
Vect::Vect(const float p_x, const float p_y, const float p_z, const float p_w);
Vect operator*(const float p_sclr) const;
private:
float x;
float y;
float z;
float w;
};
Vect::Vect(const float p_x, const float p_y, const float p_z, const float p_w) {
x = p_x;
y = p_y;
z = p_z;
w = p_w;
}
Vect Vect::operator*(const float p_sclr) const {
return Vect( (x * p_sclr), (y * p_sclr), (z * p_sclr), 1); // reset w to 1
}
//Problem Non-MemberOperator
Vect operator*(const float p_sclr, const Vect& p_vect);
Vect operator*(const float p_sclr, const Vect& p_vect) {
return p_vect * p_sclr;
}
但是当我去测试接线员的时候:
Vect A(2.0f, 3.0f, 4.0f, 5.0f);
float s = 5.0f;
Vect C, D;
C = A * s; // Fine
D = s * A; // Error as below
我收到以下编译错误:
错误 C2678: 二进制 '*' : 未找到采用 'float' 类型的左操作数的运算符(或没有可接受的转换)
谁能提供关于为什么会发生这种情况的见解? MS 文档可在 http://msdn.microsoft.com/en-us/library/ys0bw32s(v=VS.90).aspx 获得,它对 Visual Studio 2008 的帮助不是很大。这是我收到的唯一编译错误或警告。
【问题讨论】:
-
你确定吗?我希望
A * s不工作,s * A工作...... -
请发布一个完整的简短示例,以便大家了解 Vect 的定义方式和位置,以及您在哪个命名空间中定义了运算符*
-
您没有在右花括号后用分号标记 Vect 类的结尾。这是复制粘贴错误还是您的代码实际看起来像这样?
-
复制粘贴,现在编辑。
标签: c++ visual-studio-2008 operator-overloading