Это зависит от языка, но должен быть модификатор, который вы можете добавить к шаблону регулярного выражения. В PHP это:
/(.*)<FooBar>/s
. S в конце заставляет точку соответствовать всем символам, включая символы новой строки.
return
содержит вызов оператора запятой, отбрасывающий результат первого выражения (который должен был быть числителем) и вызов конструктора только с одним параметром. Вы должны использовать правильный синтаксис инициализации:
return Rational
(
(lhs.numerator() * rhs.denominator()) + (lhs.denominator() * rhs.numerator())
, lhs.denominator() * rhs.denominator()
);
или
return
{
(lhs.numerator() * rhs.denominator()) + (lhs.denominator() * rhs.numerator())
, lhs.denominator() * rhs.denominator()
};
или (лучше)
return Rational
{
(lhs.numerator() * rhs.denominator()) + (lhs.denominator() * rhs.numerator())
, lhs.denominator() * rhs.denominator()
};
Эта строка вызывает вашу ошибку:
return ((lhs.numerator() * rhs.denominator()) + (lhs.denominator() * rhs.numerator()), lhs.denominator() * rhs.denominator());
Проблема в том, что она оценивается как целое, что дает вам целое число. Это целое число затем передается неявно вызванному конструктору вашего класса Rational
. Обратите внимание, что в этой строке используется запятая. Для кода, подобного a, b
, он сначала оценивает a
, отбрасывает результат, а затем оценивает b
и сохраняет этот результат как результат общего выражения. Это не то, что вы хотели.