操作符<<用std :: ostringstream问题覆盖

时间:2019-03-23 04:47:31

标签: c++

这是我的玩具程序。它无法编译并显示错误消息“没有运算符<<与这些操作数匹配”。任何帮助将不胜感激。

struct foo {
    std::string name;
};

std::ostringstream& operator<<(std::ostringstream& os, const foo& info)
{
    os << info.name;
    return os;
}

void insert(const foo& info)
{
    std::ostringstream os;
    os << "Inserted here " << info;  // don't work here
}

int main()
{
    foo f1;
    f1.name = "Hello";
    insert(f1);

}

1 个答案:

答案 0 :(得分:4)

原因

os << "Inserted here " << info;

不起作用是

os << "Inserted here "

返回std::ostream&,而不是std::ostringstream&

选项:

  1. 将功能更改为使用std::ostream而不是std::ostringstream

    std::ostream& operator<<(std::ostream& os, const foo& info) { ... }
    
  2. 更改使用方式。使用

    os << "Inserted here ";
    os << info;
    

我强烈建议您使用第一个选项。