显然,我在这里遗漏了一些关于字符串流的重要信息,但有人可以解释原因
#include <sstream>
using namespace std;
stringstream foo() {
stringstream ss;
return ss;
}
Run Code Online (Sandbox Code Playgroud)
失败了
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
Run Code Online (Sandbox Code Playgroud)
如何从函数中正确返回字符串流?(编辑:为完整的代码段添加了标题并修复了拼写错误)
How*_*ant 19
在更正返回类型中的type-o之后(由Mahesh注释),您的代码将无法在C++ 03中编译,因为stringstream它不可复制.但是,如果你的编译器支持C++ 0x中,把上允许你的代码,因为编译stringstream的MoveConstructible.
wil*_*ell 12
您无法按值返回函数流,因为这意味着您必须复制流.C++流不可复制.
老问题,但我相信实现您想要的正确方法是使用stringstream::str方法,该方法返回一个字符串对象,其中包含流缓冲区中当前内容的副本。
这是一个带有string str() const;.
std::string foo() {
stringstream ss;
ss << "add whatever you want to the stream" << 12 << ' ' << 13.4;
return ss.str();
}
int main() {
std::cout << foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印:
add whatever you want to the stream 12 13.4
Run Code Online (Sandbox Code Playgroud)