class mystream : public std::stringstream
{
public:
void write_something()
{
this << "something";
}
};
这导致VC ++ 10上出现以下两个编译错误:
error C2297: '<<' : illegal, right operand has type 'const char [10]'
error C2296: '<<' : illegal, left operand has type 'mystream *const '
从第二个判断,这是因为this
点不能改变,但&lt;&lt;&lt;&lt;&lt;&lt;运算符(或至少声明它就像它一样)。正确?击>
还有其他方法我仍然可以使用<<
上的>>
和this
运算符吗?
答案 0 :(得分:8)
mystream *const
表示this
是指向非常量对象的常量指针。问题是您正在尝试将流插入到指针中 - 您必须插入到流中。请尝试以下方法。
*this << "something";
答案 1 :(得分:1)
stringstream的析构函数(实际上是basic_stringstream<char>
)不是虚拟的,而且作为C ++ SL的所有类,你真的不应该从它们派生出来......
根据您想要做什么,我会告诉您更喜欢组合继承,也许可以创建自己的模板&lt;&lt;和&gt;&gt;将使用您的基础流的运算符。或者也许更明智的做法是不使用stringstream作为成员。