如何调用运算符<<在std :: stringstream的后代中的“this”?

时间:2010-06-10 09:24:52

标签: c++ visual-c++ visual-studio-2010 stl

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运算符吗?

2 个答案:

答案 0 :(得分:8)

mystream *const表示this是指向非常量对象的常量指针。问题是您正在尝试将流插入到指针中 - 您必须插入到流中。请尝试以下方法。

*this << "something";

答案 1 :(得分:1)

stringstream的析构函数(实际上是basic_stringstream<char>)不是虚拟的,而且作为C ++ SL的所有类,你真的不应该从它们派生出来......

根据您想要做什么,我会告诉您更喜欢组合继承,也许可以创建自己的模板&lt;&lt;和&gt;&gt;将使用您的基础流的运算符。或者也许更明智的做法是不使用stringstream作为成员。