В настоящее время я работаю над программой, которая читает json данные и отображает вывод на экран. У меня есть результаты, отображаемые в формате, который является удовлетворительным, но перегруженный оператор << не работает так, как мне нужно. Вот подробности программы. </p>
Данные istream & of json, содержащие список уравнений, передаются в заводской класс. Метод фабрики make () считывает данные и создает std :: list из std :: unique_ptr на основе данных уравнения в файле json.
AB C - это класс с именем IEquation. Класс под названием EquationBase получен из IEquation, а еще четыре класса получены из EquationBase, которые реализуют сложение, вычитание, умножение и деление. В финале для классов реализован метод output (). Этот метод вывода записывается следующим образом.
void AddEquation::output(std::ostream& os)
{
os << getLeftNumber() << " + "
<< getRightNumber() << " = " << getAnswer() << std::endl;
}
В IEquation оператор вставки потока << перегружается следующим образом. </p>
// Note: IEquation.output is called to do the work, this method is just a wrapper.
friend std::ostream& operator<<(std::ostream& os, IEquation& eq)
{
eq.output(os);
return os;
}
Мне нужен следующий код для работы в main
void printEquations(std::list<std::unique_ptr<IEquation>>& equations)
{
for (auto &eq : equations)
{
std::cout << eq;
}
}
В настоящее время этот код отображает адрес памяти для каждого уравнения в уравнениях. Я могу использовать eq и заставить его отображать то, что мне нужно, но я хотел бы знать, почему вышеупомянутая функция printEquations не работает должным образом, и что я могу сделать, кроме разыменования eq, чтобы исправить это.