Перегрузка оператора C ++ не работает должным образом

Это зависит от языка, но должен быть модификатор, который вы можете добавить к шаблону регулярного выражения. В PHP это:

/(.*)<FooBar>/s

. S в конце заставляет точку соответствовать всем символам, включая символы новой строки.

2
задан callmebob 3 March 2019 в 10:38
поделиться

2 ответа

Оператор

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()
};
0
ответ дан VTT 3 March 2019 в 10:38
поделиться

Эта строка вызывает вашу ошибку:

return ((lhs.numerator() * rhs.denominator()) + (lhs.denominator() * rhs.numerator()), lhs.denominator() * rhs.denominator());

Проблема в том, что она оценивается как целое, что дает вам целое число. Это целое число затем передается неявно вызванному конструктору вашего класса Rational. Обратите внимание, что в этой строке используется запятая. Для кода, подобного a, b, он сначала оценивает a, отбрасывает результат, а затем оценивает b и сохраняет этот результат как результат общего выражения. Это не то, что вы хотели.

0
ответ дан Ulrich Eckhardt 3 March 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: