我有一个正确的超载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'不能工作,并且''A'工作... – 2010-09-28 03:31:25
请发布一个完整的简短示例,以便人们可以看到,如何以及在哪里定义了Vect以及在您定义的名称空间中运算符* – sellibitze 2010-09-28 03:32:30
在关闭花括号之后,您没有用分号标记Vect类的结尾。这是复制粘贴错误还是代码实际上看起来像? – AndyG 2010-09-28 04:05:17