我有一个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"");
}
答案 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()
,无法隐式转换。