【问题标题】:const reference to the ostream class object对 ostream 类对象的 const 引用
【发布时间】:2019-11-01 09:10:09
【问题描述】:

我已经编写了友元函数来重载

我不小心使用了对 ostream 类的 const 引用,它显示错误提示:

错误:运算符不匹配

友元函数的类声明如下:

friend  void operator<<(const std::ostream & os,  const Time & t);

但是当我使用时:

friend  void operator<<(std::ostream & os,  const Time & t);

从代码中删除 const 可以正常工作。 为什么 const 会出错? 我认为 const 只是告诉我们没有修改对象

不工作代码的函数定义为:

 void operator<<( const std::ostream & os,const Time & t)
     {
        os  << t.hours  << "  hours and " << t.minutes << " minutes "<<std::endl;
     }

请帮我解决这个疑问 提前致谢

【问题讨论】:

  • 您的运算符在另一个方面也是错误的:重载的“输入”和“输出”运算符也应该返回对流的引用。否则你不能链接你的输出。

标签: c++


【解决方案1】:

为什么 const 会出错?

因为在 operator&lt;&lt; 函数内部,您修改 std::ostream 对象。这一行

os  << t.hours  << "  hours and " << t.minutes << " minutes "<<std::endl;

将数据写入流,所以它不能是const。更一般地说,当一个对象被声明为const 时,您只能调用其也是const-qualified 的成员函数,以及将其传递给通过const-qualified 引用的值接受它的其他函数。

【讨论】:

    【解决方案2】:

    o流中,o 代表 输出,这几乎不包括 const,因为您将内容写入该输出流对象,根据定义,这意味着流不能是常量。

    此外,不要忘记从运算符返回 std::ostream 引用,这样您将拥有以下内容:std::ostream&amp; operator&lt;&lt;(std::ostream &amp; os,const Time &amp; t)

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多