2012-08-08 37 views
0

爲了簡化問題,我在Notifications.h文件寫了這個類StringStream延長ostringstream錯誤C++

namespace A { 
namespace B { 
namespace C { 

extern std::locale g_classicLocale; 
class StringStream : public virtual std::ostringstream 
{ 
public: 
     StringStream() { imbue(g_classicLocale); } 
     virtual ~StringStream() {}; 
}; 

} // namespace C 
} // namespace B 
} // namespace A 

現在,我想在我DBNotification.cpp文件中使用StringStream

#include "Notifications.h" 

namespace A{ 
namespace B{ 
namespace C{ 

     DBNotification::DBNotification(){ 

     } 
     DBNotification::~DBNotification(){ 

     } 
     StringStream DBNotification::getValues(){ 

      // do some work and return me a StringStream Object 
     } 
} // C 
} // B 
} // A 

當我構建源代碼時,得到:

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/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/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ios_base.h:779: error: 'std::ios_base::ios_base(const std::ios_base&)' is private 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iosfwd:55: error: within this context 
../Notifications.h: In copy constructor 'A::B::C::StringStream::StringStream(const A::B::C::StringStream&)': 
../Notifications.h:49: 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/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/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/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/streambuf:781: 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/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iosfwd:71: error: within this context 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iosfwd: In copy constructor 'std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(const std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >&)': 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/iosfwd:79: 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 

有人能讓我知道發生了什麼嗎?

+0

你根本無法承受流。您可以繼承['std :: basic_streambuf'](http://en.cppreference.com/w/cpp/io/basic_streambuf)並在構建新流時使用它。 – 2012-08-08 13:21:42

+0

@JoachimPileborg以同樣的方式,我的意思是'StringStream os; os <<「helloworld」<< endl;'? – cybertextron 2012-08-08 13:23:24

+0

可能的重複[爲什麼複製stringstream是不允許的?](http://stackoverflow.com/questions/6010864/why-copying-stringstream-is-not-allowed) – ecatmur 2012-08-08 13:26:41

回答

3

通常流不能被複制。你的函數DBNotification::getValues()返回一個流對象。

請參閱this answer