У меня есть векторный класс с правильно перегруженным оператором 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. Это единственная ошибка или предупреждение компиляции, которое я получаю.