Declare operator* to be a free function, e.g.,
Vector operator*(const Vector&, const Vector&);
Sorry, on re-reading I realised that my answer is not quite correct, partially due to my lack of knowledge of matrices and vectors (I'm from my school cohort that had the most sketchy curriculum on matrices ). So pardon me if what I ask seems obvious.
The rationale for having operator* as a free function is so that an appropriate constructor can be used to (implicitly) convert related types. In this case, however, I am not so sure if makes sense to have a Vector so easily convertible to a Matrix, and/or vice versa.
So, what does vec1 * mat1 mean? If it should return a Vector, then you can have either:
On the other hand, if it returns a Matrix, then you should have:
Vector operator*(const Vector&, const Matrix&);
Vector Vector::operator*(const Matrix&) const;
Hope you get the idea.
Matrix operator*(const Vector&, const Matrix&);