首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::operator << [ _Traits = std::char_traits<char> ]中的'operator <<‘没有匹配项

std::operator << [ _Traits = std::char_traits<char> ]中的'operator <<‘没有匹配项
EN

Stack Overflow用户
提问于 2011-01-31 16:06:30
回答 1查看 4.9K关注 0票数 4

我有一个带有字符串转换操作符的类Foobar:

代码语言:javascript
复制
#include <string>

class Foobar
{
public:
   Foobar();
   Foobar(const Foobar&);
   ~Foobar();

   operator std::string() const;
};

我尝试这样使用它:

//C++源文件

代码语言:javascript
复制
#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已经定义了运算符<<。

那么为什么会出现这样的错误呢?我遗漏了什么?

编辑

我刚刚发现,如果我将发生错误的行更改为以下代码:

代码语言:javascript
复制
   ss << "Foobar is: " << fb.operator  std::string();  

编译成功。呃...!为什么编译器不能进行自动转换(Foobar ->字符串)?

解决这个问题的“最佳实践”是什么,这样我就不必使用上面丑陋的语法了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-31 16:12:52

在将Foobar fb放入流之前,不会将其转换为字符串。不要求<<运算符的参数必须是字符串。

您应该手动将其转换为字符串

代码语言:javascript
复制
ss << "Foobar is: " << std::string(fb);

或者为Foobar定义一个operator<<。

定义operator<<是一种明智的做法,而且没有理由不能在operator<<代码中直接调用字符串转换。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4848760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档