0

我有一个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<_Elem,_Traits>::basic_ios”:无法访问在类“std::basic_ios<_Elem,_Traits>”中声明的私有成员

这显然不是我的确切课程,但它是相同的设置。关于我可能做错了什么的任何想法?我正在使用 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"");
}
4

2 回答 2

2

这是因为编译器隐式声明了 class 的复制构造函数foostd::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&)
};

编译器应该指出你是罪魁祸首。

于 2010-08-01T04:43:50.260 回答
1

假设线路;上的缺失externalfunction是一个错字,我无法获得您的确切错误消息,但看起来可能externalfunction需要 astd::string作为其参数。实际上mBufferStream.str()提供了一个std::wstring不能隐式转换的。

于 2010-07-20T16:55:14.937 回答