2012-09-02 6 views
12

Ich versuche einige Informationen zurückzugeben, wenn meine toString() -Methode aufgerufen wird, die eine Ganzzahl und einige Gleitkommazahlen enthalten. Ich habe gelernt, dass ostringstream funktioniert, aber wenn die Klasse, die diese Methode enthält, immer wieder aufgerufen wird, wird die Information auf meine vorherige Ausgabe gestapelt. Hier ist mein CodeWie verwende ich den ostringstream richtig in C++?

ostringstream int_buffer, float_buffer, float_buffer2; 

am Anfang meiner Klasse eingeführt wird, dann

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

Ich weiß, dass meine Codierung ist schrecklich, ich bin noch ziemlich neu in diesem, aber ein Beispiel für meine Ausgangs ist,

"Produktname: Film-Karten-Einheiten links: 49 Preis: 9.99 Umsatz: $ 9.99"

„Produktname: Film-Karten-Einheiten links: 4926 Preis: 9.999.99 Umsatz: 9.99239.76" $

wo der zweite sollte

angezeigt

"Produktname: Film-Karten-Einheiten links: 26 Preis: 9,99 Umsatz: 239,76" $

Ich weiß, es ist nur eine Frage der Aktualisierung, aber das ist, wo ich verloren bin.

Antwort

27

Declare int_buffer, float_buffer und float_buffer2 innerhalb toString. Da Sie in der Klasse deklarieren, werden diese Objekte beibehalten, so dass Sie jedes Mal, wenn Sie aufrufen, zu int_buffer, float_buffer und float_buffer2 immer wieder verketten. Wenn Sie innerhalb der Methode deklarieren, werden sie nur existieren, während toString aktiv ist. Wie auch immer, du machst zu viel Code für das, was du zu tun versuchst. Sie könnten einfach tun:

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

    return buffer.str()  
} 
+0

Vielen Dank! lol das macht so viel mehr Sinn – Arminium

+0

@Arminium, wenn meine Antwort nützlich war, möchten Sie es als akzeptiert markieren. –