【问题标题】:Trying to overload<< class function试图重载<<类函数
【发布时间】:2017-04-04 02:53:53
【问题描述】:

我正在尝试在函数上重载 operator

#include <iostream>

class foo
{
public:
   foo& operator<< (foo& (*pf)(foo&))
   {
     return pf(*this);
   }
   foo& do_something_more(foo& os)
   {
     return os;
   }
};

ostream& do_something(ostream& os)
{
   os << "1." << "\n" << "2.";
   return os;
}

int main()
{
    foo a;

    std::cout << do_something; // this works
    a << do_something_more; // this do not

    system("pause");
    return 0;
}

这只是我尝试解决此问题的一个示例。我在这个中收到错误 'do_something_more':indeclared identifier。

感谢您的帮助!

【问题讨论】:

  • do_something_more() 是foo 的成员函数,你需要一个实例来调用它。
  • 或将其设为静态并使用a &lt;&lt; foo::do_something_more;... 或只是非会员。
  • 这些东西没有任何意义。
  • @Norbert 你是不是想重载std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const foo&amp;) 函数?
  • 我正在寻找确切的行为a &lt;&lt; do_something_more;。编辑:好的。我以非成员friend ostream&amp; do_something(ostream&amp; os) 的身份完成了我的功能,这很有效。我被困了很多小时,答案很简单。感谢您的帮助:)

标签: c++ operator-overloading overloading


【解决方案1】:

正如错误所说,您没有声明任何名为 do_something_more 的对象。这是您的 foo 类中的一个方法。试试cout&lt;&lt;a.do_something_more();

即使这样,我也不确定它是否会起作用。

【讨论】:

  • 你先试试吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
相关资源
最近更新 更多