【问题标题】:Overloading the stream insertion operator重载流插入操作符
【发布时间】:2020-08-08 15:02:52
【问题描述】:

我正在尝试为分配重载流插入运算符。在我的头文件中,我有以下内容:

friend ostream& operator<<(ostream, Vector);

在我的实现文件中,我有:

friend ostream& operator<<(ostream& outputStream, Vector& displayMe) {
    outputStream << "<" << displayMe.GetVX << "," << displayMe.GetVY << ">";
    return outputStream;
}

我收到一条错误消息:

“类声明外的说明符无效”

错误指向我的实现文件中以friend ostream&开头的行。

我显然是运算符重载的新手。我应该在课堂之外定义这个吗?我只是对为什么会收到此错误以及如何修复代码感到困惑。任何建议都会有所帮助。

【问题讨论】:

  • this
  • 您不能在类声明之外使用friend。此外,您在实现文件中的定义与头文件中的声明不匹配(ostream vs ostream&amp; 在第一个参数中,Vector vs Vector&amp; 在第二个参数中)。声明和定义需要相互匹配。

标签: c++ operator-overloading operator-keyword cout


【解决方案1】:

您需要在Vector 类中声明ostream&lt;&lt; 运算符:

class Vector
{
  // ...
  friend ostream& operator<<(ostream&, Vector&);
};

还要注意,您还需要在签名中使用引用。

你没有在操作符的实现中指定friend

此外,建议在此处通过 const-reference 获取 Vector

ostream& operator<<(ostream&, Vector const&);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2019-03-15
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多