19

toString()メソッドが呼び出されたときに、整数といくつかの浮動小数点数を含むいくつかの情報を返そうとしています。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」

2番目のものが表示される場所

「製品名:映画チケット残りユニット数:26価格:9.99収益:$239.76」

私はそれがただ更新の問題であることを知っています、しかしそれは私が迷子になっているところです。

4

1 に答える 1

42

int_buffer、、float_bufferおよびfloat_buffer2内部toString()関数を宣言します。クラスで宣言しているため、これらのオブジェクトは保持されます。したがって、関数を呼び出すたびに、、、およびを何度toString()も連結します。メソッド内で宣言すると、がアクティブな間だけ存在します。とにかく、あなたはあなたがやろうとしていることに対してあまりにも多くのコードをやっています。あなたは簡単に行うことができます:int_bufferfloat_bufferfloat_buffer2toString

std::string toString()
{
    std::ostringstream buffer; 
    buffer << "Product name: "<< description << " Units left: " << on_hand << " Price: "<< price << " Revenue: $" << generated_revenue;
    return buffer.str();
}
于 2012-09-02T05:55:21.453 に答える