использование stringstream в качестве значения по умолчанию внутри встроенной функции - PullRequest
0 голосов
/ 23 февраля 2012

Я на C ++ 03, и я только начал приближаться к C ++.

Я хочу создать функцию, которая устанавливает некоторые свойства в потоке строки и возвращает его (или может передать его по ссылке)

inline stringstream get_fixed_stream(stringstream ss=stringstream("")) {
    ss.precision(4);
    ss.setf(ios::fixed);
    return ss;
}

так что если я позвоню:

stringstream ss = get_fixed_stream()

я получаю новую строку, если я позвоню

cout = get_fixed_stream (cout)

точность и setf установлены в cout.

я получаю эту ошибку:

/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

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

std::cout не является потоком строк и не может быть передан как единое целое.

попробуйте вместо этого

template<typename Stream>
void fix_stream(Stream& stream){ 
    stream.precision(4);
    stream.setf(std::ios::fixed);
}
:::
fix_stream(std::cout);
std::stringstream ss;
fix_stream(ss);
1 голос
/ 23 февраля 2012

Я предлагаю использовать ссылку ( & ниже):

inline stringstream & get_fixed_stream(stringstream & ss)
{
ss.precision(4);
ss.setf(ios::fixed);
return ss;
}
...