4

例えば:

std::stringstream formatMemUsage(...) {
    std::stringstream ss ...
    ...
    return ss << "MB";   // Error here
}

エラーが発生しますno suitable user-defined conversion from "std::basic_ostream<char, std::char_traits<char>>" to "std::stringstream" exists

return ステートメントを 2 つのステートメントに分割するとss << "MB"; return ss;エラーが消えます。なぜですか?

(MSVC++ 2010 を使用)

4

2 に答える 2

1

いくつかの問題があります。1 つ目は、Yuushi が指摘するように、式の型が でありss << "MB"std::ostream&ではなく、 からへstd::stringstreamの暗黙の変換がないことです。2 つ目は、ストリームはコピーできないため、 (コピーが必要になる) を返す方法がないことです。また、単純に戻り値を に変更することはできません。ローカル変数への参照が返されるためです。関数の最後で破棄されます。std::ostreamstd::stringstreamstd::stringstreamstd::ostream&ss

何を達成しようとしていますか?ほとんどの場合、文字列 ( ) を返すだけss.str()の方が良い解決策です。

于 2013-05-10T09:36:55.343 に答える