2012-02-23 85 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() 

我recive新strinstring,如果我打電話

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 
+1

你試圖通過值返回流。這不起作用,流不可複製。這是什麼錯誤信息告訴你:流類的拷貝構造函數是私有的。 – jrok 2012-02-23 15:46:29

回答

3

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

+1,我喜歡這種方法,因爲它工作(至少)所有std :: ios_base類型。 – 2012-02-23 15:50:55

+0

@AlexP。對於一個鼴鼠山來說,這是一個槌子,我相信在大多數情況下捕獲ostream基礎都會很好,但是這將適用於與該接口編譯的任何東西。 – 111111 2012-02-23 19:03:51

1

我建議使用一個參考(以下&):

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