2012-09-02 14 views
12

Estoy intentando devolver algo de información cuando se llama a mi método toString(), que incluye un número entero y algunos flotantes. Aprendí sobre ostringstream funciona muy bien, pero cuando la clase que contiene este método se llama una y otra vez, la información se apila en mi salida anterior. Aquí está mi código¿Cómo uso ostringstream correctamente en C++?

ostringstream int_buffer, float_buffer, float_buffer2; 

se introduce en el comienzo de mi clase, a continuación,

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; 
    } 

Sé que mi codificación es horrible, yo todavía soy bastante nuevo en esto, pero un ejemplo de mi salida es decir,

"nombre del producto: Película Unidades de entradas restante: 49 Precio: 9.99 ingresos: $ 9.99"

"nombre del producto: Película Unidades de entradas restante: 4926 Precio: 9.999.99 Ingresos: $ 9.99239.76"

en el que el segundo debe mostrar

"Nombre del producto: Película Unidades de entradas restante: 26 Precio: 9.99 Ingresos: $ 239.76"

Sé que es solo una cuestión de actualización, pero ahí es donde estoy perdido.

Respuesta

27

Declare int_buffer, float_buffer y float_buffer2 dentro de toString. Debido a que declara en la clase, esos objetos se guardan, por lo que cada vez que llame al toString concatenará a int_buffer, float_buffer y float_buffer2 una y otra vez. Si declara dentro del método, estos solo existirán mientras el toString esté activo. De todos modos, estás haciendo demasiado código por lo que intentas hacer. Simplemente puede hacerlo:

std::string toString() 
{ 
    std::ostringstream buffer; 
    buffer << "Product name: "<< description << " Units left: " << on_hand << " Price: "<< price << " Revenue: $" << generated_revenue; 

    return buffer.str()  
} 
+0

¡Muchas gracias! jaja, esto tiene mucho más sentido – Arminium

+0

@Arminium si mi respuesta fue útil, puede querer marcarla como aceptada. –

Cuestiones relacionadas