2012-09-02 17 views
12

Tôi đang cố gắng trả lại một số thông tin khi phương thức toString() của tôi được gọi, bao gồm số nguyên và một số phao. Tôi đã học về ostringstream công trình tuyệt vời nhưng khi lớp có chứa phương pháp này được gọi là hơn và hơn nữa, thông tin được xếp chồng lên đầu ra trước đó của tôi. Đây là mã của tôiLàm thế nào để sử dụng ostringstream đúng trong c + +?

ostringstream int_buffer, float_buffer, float_buffer2; 

được giới thiệu ở phần đầu của lớp học của tôi, sau đó

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

tôi biết mã của tôi là khủng khiếp, tôi vẫn còn khá mới với điều này, nhưng một ví dụ về đầu ra của tôi là,

"tên sản phẩm: Movie vé đơn vị còn lại: 49 Giá: 9,99 Doanh thu: $ 9,99"

"tên sản phẩm: Movie vé đơn vị còn lại: 4926 Giá: 9.999.99 Doanh thu: $ 9.99239.76"

nơi thứ hai sẽ hiển thị

"Tên sản phẩm: Movie vé đơn vị còn lại: 26 Giá: 9,99 Doanh thu: $ 239,76"

Tôi biết đó chỉ là vấn đề cập nhật, nhưng đó là nơi tôi bị mất.

Trả lời

27

Khai báo int_buffer, float_bufferfloat_buffer2 bên trong toString. Bởi vì bạn đang khai báo trong lớp, những đối tượng đó được lưu giữ xung quanh, do đó, mỗi khi bạn gọi toString, bạn đang ghép nối với int_buffer, float_bufferfloat_buffer2 lặp đi lặp lại. Nếu bạn khai báo bên trong phương thức, chúng sẽ chỉ tồn tại trong khi toString đang hoạt động. Dù sao, bạn đang làm quá nhiều mã cho những gì bạn đang cố gắng làm. Bạn có thể chỉ cần thực hiện:

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

    return buffer.str()  
} 
+0

Cảm ơn bạn rất nhiều! lol này làm cho ý nghĩa hơn rất nhiều – Arminium

+0

@Arminium nếu câu trả lời của tôi là hữu ích bạn có thể muốn đánh dấu nó như được chấp nhận. –