Код, который вы написали, выглядит так, как будто он компилируется, но вызывает бесконечный цикл, так как он вызывает сам себя.scale*s
- это сокращение для operator*(scale, s)
, которое в настоящее время определяется функцией.Вам нужно заменить строку scale*s
на baby-steps для компилятора.Это будет выглядеть примерно так:
statistician operator *(double scale, const statistician& s)
{
statistician result
result.count = /*???*/;
result.total = /*???*/;
/*etc*/;
return result;
}
Как только это определено, вы также можете захотеть statistician*double
, который может просто делать то, что вы запрограммировали как double*statistician
, вот так.(Обратите внимание, что он не должен быть классом-другом, поскольку он вызывает только публичные функции)
statistician operator *(const statistician& s, double scale)
{
return operator *(scale, s);
}