我如何使用类wstringstream变量?

时间:2010-07-20 16:19:50

标签: c++ stringstream

我有一个std::wstringstream,我在我的班级中使用它作为一种缓冲区,它被这个类中的很多方法使用。但是,当我尝试做这样的事情时:

#include <sstream>

class foo
{
  public:
    void methodA(int x, int y); // Uses mBufferStream
    void methodB(int x, int y); // Uses mBufferStream

  private:
    std::wstringstream mBufferStream;
};

我收到以下错误:

  

错误C2248:'std :: basic_ios&lt; _Elem,_Traits&gt; :: basic_ios':无法访问类'std :: basic_ios&lt; _Elem,_Traits&gt;'

中声明的私有成员

这显然不是我的确切类,但它是相同的设置。关于我可能做错什么的任何想法?我正在使用Microsoft Visual Studio 2005。

[编辑]显示在.cpp文件中使用方法体(作为其使用示例):

void foo::methodA(int x, int y)
{
  mBufferStream << "From " << x << " To " << y;
  externalfunction(mBufferStream.str());  // Prints to message service
  mBufferStream.str(L"");
}

2 个答案:

答案 0 :(得分:2)

这是因为编译器隐式声明了类foo的复制构造函数。 std::wstringstream是不可复制的,因为它继承自ios_base

将您的班级更改为:

#include <sstream>

class foo
{
  public:
    void methodA(int x, int y); // Uses mBufferStream
    void methodB(int x, int y); // Uses mBufferStream

  private:
    std::wstringstream mBufferStream;
    foo(const foo&); //noncopyable
    void operator=(const foo&)
};

并且编译器应该指出你的罪魁祸首。

答案 1 :(得分:1)

假设;行上缺少externalfunction是一个拼写错误,我无法得到您的确切错误消息,但看起来externalfunction可能需要{{1}作为参数。实际上std::string提供了mBufferStream.str(),无法隐式转换。