我有一個正確的超載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