 <p>This is why it is a bad idea to declare most binary operators as member functions - they are asymmetric. You need</p> <pre><code>class Kinetics; Kinetics operator *(const Kinetics&amp; k, double c); Kinetics operator *(double c, const Kinetics&amp;k) { return k*c; } class Kinetics{ double x; double y; double z; public: Kinetics(); Kinetics(double x_, double y_, double z_); Kinetics(const Kinetics &amp; obj); ~Kinetics(); double get_x(); void set_x(double x_); Kinetics operator + (const Kinetics &amp; obj); friend Kinetics operator * (const Kinetics&amp; k, double c); void operator = (const Kinetics &amp; obj); }; </code></pre>