私は、文字列の変換演算子を持つクラスfoobarに持っているため一致:私はそれを使用しようとする'演算子<<' のstdで::演算子<< [_Traits =のstdと:: char_traits <char>]
#include <string>
class Foobar
{
public:
Foobar();
Foobar(const Foobar&);
~Foobar();
operator std::string() const;
};
をこのように:
// C++のソースファイル
#include <iostream>
#include <sstream>
#include "Foobar.hpp"
int main()
{
Foobar fb;
std::stringstream ss;
ss << "Foobar is: " << fb; // Error occurs here
std::cout << ss.str();
}
私は明示的にfoobarのためにオペレータ< <を作成する必要がありますか?。 FooBarはiostreamに配置される前に文字列に変換され、std :: stringにはすでに演算子があるので、なぜ必要なのかわかりません。< <が定義されています。
なぜこのエラー?私は何が欠けていますか?
[編集]は
私はこれに、私はラインを変更した場合、エラーがで発生していることが分かった:それは正常にコンパイル
ss << "Foobar is: " << fb.operator std::string();
。 Urgh ...!コンパイラが自動変換(Foobar - > string)を実行できないのはなぜですか?
これを解決するためのベストプラクティスの方法は何ですか?上記の醜い構文を使用する必要はありません。
http://stackoverflow.com/q/6677072/560648? –