2012-02-23 3 views
0

Я на C++ 03, и я только начал подходить к C++.использование stringstream в качестве значения по умолчанию внутри встроенной функции

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

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

так, если я называю:

stringstream ss = get_fixed_stream() 

я Получать новую strinstring, если я называть

соиЬ = 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 
+1

Вы пытаетесь вернуть поток по значению. Это не сработает, потоки не копируются. Это то, что сообщение об ошибке сообщает вам: класс-экземпляр stream-constructor является закрытым. – jrok

ответ

3

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

попробовать это вместо

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); 
+0

+1, мне нравится этот подход, поскольку он работает (по крайней мере) для всех типов std :: ios_base. –

+0

@AlexP. это немного молоток для мольного холма, я уверен, что захват базы ostream в любом случае будет таким же хорошим, но это будет работать со всем, что компилируется с этим интерфейсом. – 111111

1

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

inline stringstream & get_fixed_stream(stringstream & ss) 
{ 
ss.precision(4); 
ss.setf(ios::fixed); 
return ss; 
} 
Смежные вопросы