Именно поэтому бинарные операторы, такие как * или +, не должны быть членами.
Если бы вы сделали s = u * 2
, это сработало бы, предполагая, что у вас есть неявный конструктор для statistician
, который принимает один аргумент int
.Однако 2 * u
не работает, потому что 2 не является statistician
, а int
не является классом с членом operator*
.
Чтобы это работало правильно, вы должны определить не-член operator*
и сделайте его friend
из statistician
:
statistician operator*(const statistician &left, const statistician &right);
Вам также нужно определить другие версии operator*
, которые принимают целые числа (или любые другие типы, которые вы хотите бытьвозможность "умножения") или определения неявных конструкторов для statistician
для включения неявного преобразования.