开发者

No match for 'operator <<' in std::operator << [With _Traits = std::char_traits<char> ]

I have a class Foobar with string conversion operator:

#include <string>

class Foobar
{
publi开发者_如何学Cc:
   Foobar();
   Foobar(const Foobar&);
   ~Foobar();

   operator std::string() const;
};

I attempt to use it like this:

//C++ source file

#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();
}

Do I need to explicitly create an operator << for Foobar?. I don't see why that should be necessary since FooBar is converted to a string before being placed in the iostream, and std::string already has operator << defined.

So why this error?. What am I missing?

[Edit]

I just found out that if I changed the line the error occurs on, to this:

   ss << "Foobar is: " << fb.operator  std::string();  

It compiles successfully. Urgh ...! Why can't the compiler do the automatic conversion (Foobar -> string) ?

What is the 'best practise' way to resolve this, so I don't have to use the ugly syntax above?


Foobar fb is not converted to a string before being placed into your stream. There is no requirement that arguments to the << operator must be strings.

You should either convert it to a string manually

ss << "Foobar is: " << std::string(fb);

Or define an operator<< for Foobar.

Defining an operator<< would be the smart way to go, and there's no reason you couldn't just call your string conversion in your operator<< code.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜