Как правильно использовать ostringstream в С++?
Я пытаюсь вернуть некоторую информацию, когда вызывается мой метод toString(), который включает в себя целое число и некоторые поплавки. Я узнал, что ostringstream отлично работает, но когда класс, содержащий этот метод, вызывается снова и снова, информация складывается на мой предыдущий вывод. Вот мой код
ostringstream int_buffer, float_buffer, float_buffer2;
вводится в начале моего класса, то
string toString()
{
int_buffer << on_hand;
float_buffer << price;
float_buffer2 << generated_revenue;
string stron_hand = int_buffer.str();
string strprice = float_buffer.str();
string strrev = float_buffer2.str();
string output = "Product name: " + description + " Units left: " + stron_hand + " Price: " + strprice + " Revenue: $" + strrev;
return output;
}
Я знаю, что мое кодирование ужасное, я до сих пор довольно новичок в этом, но примером моего вывода является
"Название продукта: Movie Ticket Осталось единиц: 49 Цена: 9.99 Доход: $9.99"
"Название продукта: Movie Ticket Единицы слева: 4926 Цена: 9.999.99 Доход: $9.99239.76"
где второй должен отображать
"Название продукта: Билетный билет Осталось единиц: 26 Цена: 9.99 Доход: $239.76"
Я знаю, что это просто вопрос обновления, но я потерял его.
Ответы
Ответ 1
Объявляет int_buffer
, float_buffer
и float_buffer2
внутри toString()
функции. Потому что вы объявляете в классе, те объекты, которые хранятся вокруг, так что каждый раз, когда вы звоните toString()
функционируют вы конкатенации к int_buffer
, float_buffer
и float_buffer2
снова и снова. Если вы объявите внутри метода, они будут существовать только тогда, когда активна toString
. Во всяком случае, вы делаете слишком много кода для того, что вы пытаетесь сделать. Вы можете просто сделать:
std::string toString()
{
std::ostringstream buffer;
buffer << "Product name: "<< description << " Units left: " << on_hand << " Price: "<< price << " Revenue: $" << generated_revenue;
return buffer.str();
}