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 <<' はあいまいです c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(434): '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定義されているので、 orstdのように書く必要があります。グローバル名前空間でそれを探しますが、そこにはそのようなクラスは定義されていません。std::stringstream::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 に答える