2012-09-02 12 views
12

Próbuję zwrócić niektóre informacje po wywołaniu metody toString(), która zawiera liczbę całkowitą i niektóre zmiennoprzecinkowe. Dowiedziałem się o ostringstream działa świetnie, ale gdy klasa, która zawiera tę metodę jest wywoływana w kółko, informacja zostaje ułożona na moim poprzednim wyjściu. Oto mój kodJak poprawnie używać ostringstream w C++?

ostringstream int_buffer, float_buffer, float_buffer2; 

jest wprowadzany na początku mojej klasie, a następnie

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

wiem, że mój kodowanie jest okropne, jestem jeszcze dość nowy, ale przykładem mojego wyjścia jest

"Nazwa produktu: Film Jednostki biletów lewej: 49 Cena: 9.99 Przychody: $ 9.99"

„Nazwa produktu: Film Jednostki biletów lewej: 4926 Cena: 9.999.99 Przychody: $ 9.99239.76"

gdzie drugi powinien wyświetlać

"Nazwa produktu: Film Jednostki biletów lewej: 26 Cena: 9.99 Przychody: $ +239,76"

Wiem, że to tylko kwestia aktualizacji, ale tutaj się zgubiłem.

Odpowiedz

27

Zadeklaruj int_buffer, float_buffer i float_buffer2 wewnątrz toString. Ponieważ deklarujesz w klasie, obiekty te są trzymane w pobliżu, więc za każdym razem, gdy wywołujesz toString, łączymy się kolejno z int_buffer, float_buffer i float_buffer2. Jeśli zadeklarujesz w metodzie, będą istnieć tylko wtedy, gdy aktywny jest toString. W każdym razie robisz za dużo kodu na to, co próbujesz zrobić. Możesz po prostu zrobić:

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

    return buffer.str()  
} 
+0

Dziękuję bardzo! To sprawia, że ​​o wiele bardziej sensowne jest – Arminium

+0

@Arminium, jeśli moja odpowiedź była przydatna, możesz oznaczyć ją jako zaakceptowaną. –