我有一个带有字符串转换操作符的类Foobar:
#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(); 编译成功。呃...!为什么编译器不能进行自动转换(Foobar ->字符串)?
解决这个问题的“最佳实践”是什么,这样我就不必使用上面丑陋的语法了?
发布于 2011-01-31 16:12:52
在将Foobar fb放入流之前,不会将其转换为字符串。不要求<<运算符的参数必须是字符串。
您应该手动将其转换为字符串
ss << "Foobar is: " << std::string(fb);或者为Foobar定义一个operator<<。
定义operator<<是一种明智的做法,而且没有理由不能在operator<<代码中直接调用字符串转换。
https://stackoverflow.com/questions/4848760
复制相似问题