// Second try to make member function as friend #include class Vector3; class Matrix3x3 { private: double A[3][3]; public: Vector3 operator* ( Vector3 & v ) { Vector3 out; int i, k; for (i = 0; i < 3; i = i + 1) { out.d[i] = 0.0; for (k = 0; k < 3; k = k + 1) out.d[i] = out.d[i] + A[i][k] * v.d[k]; } return(out); } }; class Vector3 { private: double d[3]; friend Vector3 Matrix3x3::operator* ( Vector3 & v ); };