13

明らかに私はここでストリングストリーム一般について重要な何かを見逃していますが、誰かがその理由を説明できますか

#include <sstream>
using namespace std;

stringstream foo() {
  stringstream ss;
  return ss;
}

で失敗する

In file included from /usr/include/c++/4.4/ios:39,
             from /usr/include/c++/4.4/ostream:40,
             from /usr/include/c++/4.4/iostream:40,
             from rwalk.cpp:1:/usr/include/c++/4.4/bits/ios_base.h: In copy constructor ‘std::basic_ios<char,    std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:/usr/include/c++/4.4/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/include/c++/4.4/iosfwd:47: error: within this context
/usr/include/c++/4.4/iosfwd: In copy constructor ‘std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(const std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&)’:
/usr/include/c++/4.4/iosfwd:75: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here 
/usr/include/c++/4.4/streambuf: In copy constructor ‘std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::basic_stringbuf(const std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >&)’:
/usr/include/c++/4.4/streambuf:770: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]’ is private
/usr/include/c++/4.4/iosfwd:63: error: within this context
/usr/include/c++/4.4/iosfwd: In copy constructor ‘std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(const std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&)’:
/usr/include/c++/4.4/iosfwd:75: note: synthesized method ‘std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::basic_stringbuf(const std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >&)’ first required here 
rwalk.cpp: In function ‘std::stringstream foo()’:
rwalk.cpp:12: note: synthesized method ‘std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(const std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&)’ first required here 

関数から文字列ストリームを正しく返すにはどうすればよいですか?(編集:完全なコードスニペットのヘッダーを追加し、タイプミスを修正しました)

4

6 に答える 6

19

戻り値の型 (Mahesh が指摘) の type-o を修正した後、stringstreamコピーできないため、コードは C++03 でコンパイルされません。ただし、コンパイラが C++0x をサポートしている場合は、それをオンにするとコードをコンパイルできstringstreamますMoveConstructible

于 2011-02-25T16:51:38.710 に答える
12

値によって関数からストリームを返すことはできません。これは、ストリームをコピーする必要があることを意味するためです。C++ ストリームはコピーできません。

于 2011-02-25T16:46:49.257 に答える
3

C ++ 03では機能しませんが、C++11では機能するはずです。ただし、現在のコンパイラにはまだ問題がある可能性があります(C ++ 11との完全な互換性がないため)。たとえば、上記のコードはg++4.6.1ではコンパイルされません。

于 2012-02-28T23:09:53.137 に答える
1

ss.str()C++03 では、ストリームをコピーできないため、非 const 参照によって stringstream をパラメーターとして渡すか、結果の文字列 ( ) だけを返す必要があります。

于 2011-02-25T16:58:11.567 に答える
-2

の代わりにインクルードsstreamして持っている必要があります。std::stringstreamstringstream

于 2011-02-25T16:45:07.430 に答える