C ++中的助手操作员问题

时间:2014-03-12 02:59:33

标签: c++ operator-overloading iostream

尝试在我的帮助程序操作符中返回我的操作系统时出现了一个奇怪的错误。这是代码:

std::ostream operator<<(std::ostream& os, const Item& i) {
    i.display(os);
    return os;
}

我正在使用的编译器告诉我它无法访问,但我不知道为什么或如何解决它。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

std::ostream不可复制,您应该通过引用返回

std::ostream& operator<<(std::ostream& os, const Item& i)
//          ^

答案 1 :(得分:0)

您定义了运算符&lt;&lt;()以返回ostream - 一个值 - 但您将os作为引用,因此返回隐式调用ostream的复制构造函数以生成要返回的值。 ostream没有复制构造函数,因此出错。只需将运算符&lt;&lt;()定义的返回类型更改为ostream&amp; - 然后你有引用,引用,不需要构造值,没有错误。