Подтвердить что ты не робот

Как правильно использовать 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"

Я знаю, что это просто вопрос обновления, но я потерял его.

4b9b3361

Ответ 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();
}