0

我无法编译以下 stringstreamm

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'

编辑:

错误 C2593: 'operator <<' is ambiguous c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(434): could be 'std::basic_ostream<_Elem,_Traits>::_Myt &std:: basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits>::_Mysb *)' with [ _Elem=char, _Traits=std::char_traits ]

4

7 回答 7

3

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-24T13:16:25.320 回答
2

您需要像调用函数一样调用运算符。

std::stringstream s;

operator<<(s, "Your string")
于 2010-06-24T13:10:47.907 回答
2

真的很时髦:

qss.operator <<("some text ");
qss.operator <<(DDateTime::date2Oracle(dFrom));
qss.operator <<(" more text "); 
qss.operator <<(DDateTime::date2Oracle(dUntil));

而且您可能会更好地了解歧义在哪里。

于 2010-06-24T13:14:35.303 回答
2

好吧,很明显,无论DDateTime::date2Oracle(dFrom)返回什么类型都没有实现<<运算符。所以你必须自己写一个。

至于语法,首先你必须像调用它实际上是一个函数一样调用它:

stringstream qss;
operator<<(
     (operator<<(qss <<  "some text ", 
                 DDateTime::date2Oracle(dFrom)) << " more text "),
      DDateTime::date2Oracle(dUntil));

其次,stringstream在命名空间中定义std,所以你必须把它写成std::stringstreamor ::std::stringstream::stringstream将在全局命名空间中查找它,并且那里没有定义这样的类。

顺便说一句,operator<<通常是作为免费功能实现的,所以qss.operator<<不起作用。

于 2010-06-24T13:16:51.183 回答
1

显式转换为/构造字符串:

qss << "some text " << string(DDateTime::date2Oracle(dFrom)) 
    <<  " more text " <<  string(DDateTime::date2Oracle(dUntil));
于 2010-06-24T13:12:43.263 回答
1

应该不够qss << "some text " << DDateTime...吧?

于 2010-06-24T13:18:43.297 回答
0

是什么阻止你做:

stringstream s;
s << "some text" << (DDateTime::date2Oracle(dFrom)) << "more text" << (DDateTime::date2Oracle(dUntil)) ;
于 2010-06-24T13:13:09.003 回答