ostringstream和复制构造函数出现问题

Problem with ostringstream and copy constructor

本文关键字:问题 构造函数 复制 ostringstream      更新时间:2023-10-16

可能的重复:
为什么不允许复制字符串流
如何在C++中从一个字符串流对象复制到另一个?

编译类T失败,Visual C++和GCC产生iostreams模板错误。这是代码:

#include <sstream>
class T
{
  static T copy;
  std::ostringstream log;
  T()            {}
  T(const T& t)  {log  = t.log;}
  ~T()           {copy = *this;}
};
T T::copy;

log数据成员类型更改为字符串可以使其编译并运行。这是合法行为吗?

C++中任何流类的复制构造函数和复制赋值都已成为private。也就是说,您不能复制std::ostringstream对象:

std::ostringstream ss;
std::ostringstream ss1(ss); //not allowed - copy-constructor is private
ss1=ss; //not allowed - copy-assignment is private

std::ostringstream是不可复制的,这就是您出现错误的原因。请参阅此答案了解更多详细信息,以了解如何克服此问题。

T(const T& t)  {log << t.log.rdbuf(); }

我认为ostringstream没有重载赋值(=(运算符。