Как правильно использовать ostringstream в c++?

Я пытаюсь вернуть некоторую информацию, когда вызывается мой метод 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;
    }

Я знаю, что мое кодирование ужасно, я все еще довольно новичок в этом, но пример мой вывод,

"название продукта: блоки билета кино вышли: 49 цена: 9.99 доход: $9.99"

"название продукта: блоки билета кино вышли: 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()    
}