【问题标题】:Error when implementing overloaded operator '<<' - C++实现重载运算符'<<'时出错 - C++
【发布时间】:2012-08-21 05:26:46
【问题描述】:

我目前正在尝试重载 '

在函数'std::ostream& operator

重载的运算符函数在Linkedlist实现文件中被声明为友元成员函数,因为它会访问一个私有成员变量(head_ptr):

std::ostream& operator <<(std::ostream& outs, const Linkedlist& source)
{
    node* cursor;
    for(cursor = source.get_head(); cursor != NULL; cursor = cursor->fetchLink())
    {
        outs << cursor->fetchData() << " ";
    }

    return(outs);
}

这是Linkedlist头文件中的函数原型:

friend std::ostream& operator <<(std::ostream& outs, const Linkedlist& source);

我已经爬网了,到目前为止还没有找到解决方案。任何建议都会很棒!

【问题讨论】:

    标签: c++ overloading operator-keyword


    【解决方案1】:

    您的 cursor->fetchData() 是否返回 std::string?如果是这样,您必须#include &lt;string&gt;。 或者,试试

    outs << cursor->fetchData().c_str() << " ";
    

    【讨论】:

      【解决方案2】:

      对您将来可能发布的帖子的建议:如果您在问题中发布部分代码,请发布所有相关位。目前尚不清楚fetchData() 会返回什么。

      从外观上看,fetchData() 返回的东西似乎没有 std::ostream::&lt;&lt; 的重载。

      当您输出到std::ostream 实例时,所有组件都必须具有已定义的行为。例如,在下面的示例中,要使&lt;&lt;A 的实例一起工作,操作员必须直接使用xB 需要定义一些行为,其中它推送一些标准已知的值ostream 运营商。否则,您必须为链中的所有内容提供重载。

      class B
      {
      friend std::ostream& operator<<(std::ostream& stream, const B& b);
      int x = 10;
      
      };
      
      class A
      {
      private:
      B b;
      friend std::ostream& operator<<(std::ostream& stream, const A& a);
      };
      
      std::ostream& operator<<(std::ostream& stream, const B& b)
      {
         stream << b.x;
         return stream;
      }
      std::ostream& operator<<(std::ostream& stream, const A& a)
      {
         stream << a.b;
         return stream;
      }
      int main()
      {
        A a;
        std::cout << a << "\n";
        return 0;
      }
      

      我怀疑fetchData() 返回的类型没有&lt;&lt; 运算符的重载。这就是你看到失败的原因。

      你只能做两件事

      1. 确保fetchData() 返回的类型具有&lt;&lt; 的重载。 C++ 本机和字符串类型(在&lt;string&gt; 中)已经具有此功能。如果是自定义类型,则必须为该类型编写重载。
      2. fetchData 返回一个字符串。这样您就可以在&lt;string&gt; 中为&lt;&lt; 使用std::string 重载。

      正如我之前所说,在不知道 fetchData() 返回什么的情况下,很难说这里出了什么问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-24
        • 2015-05-01
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多