我无法编译以下的字符串流
stringstream qss;
qss.operator << "some text " ::stringstream.operator << DDateTime::date2Oracle(dFrom) ::stringstream.operator << " more text " ::stringstream.operator << DDateTime::date2Oracle(dUntil);如果我只使用没有<<的::stringstream.operator操作符--它抱怨操作符很矛盾,现在它抱怨语法不正确.
error C2143: syntax error : missing ';' before 'std::stringstream'编辑:
error C2593:'operator <<‘是不明确的c:\Program \Microsoft .NET 2003\Vc7\include\ostream(434):可以是“std::basic_ostream<_Elem,_Traits>::_Myt &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits>::_Mysb *)”,_Traits=std::char_traits
发布于 2010-06-24 13:16:51
显然,无论DDateTime::date2Oracle(dFrom)返回什么类型,都不会实现<<操作符。所以你得自己写一个。
至于语法,首先您必须调用它,就像它实际上是一个函数:
stringstream qss;
operator<<(
(operator<<(qss << "some text ",
DDateTime::date2Oracle(dFrom)) << " more text "),
DDateTime::date2Oracle(dUntil));其次,stringstream是在std命名空间中定义的,所以您必须像std::stringstream或::std::stringstream那样编写它。::stringstream将在全局命名空间中查找它,并且那里没有定义这样的类。
顺便说一句,operator<<通常是作为空闲函数实现的,所以qss.operator<<不能工作。
发布于 2010-06-24 13:16:25
operator关键字不属于这里,请忽略它们:
qss << "some text" << DDateTime::date2Oracle(dFrom) << " more text " << DDateTime::date2Oracle(dUntil);除非date2Oracle函数被含糊地重载,否则这应该是完全有效和明确的。
为类型operator<<实现T的正确模式是:
template<typename Char, typename Traits>
std::basic_ostream<Char, Traits>
operator<<(std::basic_ostream<Char, Traits>& stream, const T& object) {
// now put something into the stream
return stream; // return stream << xyz ... is also possible
}发布于 2010-06-24 13:10:47
你需要像函数一样调用操作符。
std::stringstream s;
operator<<(s, "Your string")https://stackoverflow.com/questions/3110160
复制相似问题