Поскольку первые операнды перегруженных функций не являются постоянными.Но они не должны быть (на самом деле, не могут быть).
Но у вас нет копирующего ctor, который используют операторы не-присваивания.Попробуйте добавить копию ctor.
Vector3f(const Vector3f& rhs):X(rhs.X), Y(rhs.Y), Z(rhs.Z){}
При редактировании: или, может быть, я совершенно не в своей базе.:)
А почему операторы op = пишутся как друзья?Они не должны быть, так как они не симметричны.