2012-09-02 50 views
12

我正在嘗試返回一些信息,當我的toString()方法被調用,其中包括一個整數和一些浮點數。我瞭解了ostringstream的工作原理,但是當包含這個方法的類被一次又一次地調用時,這些信息被堆積到我以前的輸出上。這裏是我的代碼如何在C++中正確使用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」

我知道這只是更新的問題,但那就是我迷失的地方。

回答

27

聲明int_bufferfloat_bufferfloat_buffer2裏面toString。由於您在班級中聲明,因此這些對象將保留在周圍,因此每次撥打電話號碼toString時,都會反覆連接到int_bufferfloat_bufferfloat_buffer2。如果在方法內聲明,則只有在toString處於活動狀態時它們纔會存在。無論如何,你正在爲你正在做的事做太多的代碼。你可以簡單地做:

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

    return buffer.str()  
} 
+0

非常感謝你!大聲笑這使得更有意義 – Arminium

+0

@Arminium如果我的答案是有用的,你可能想標記爲接受。 –