实现重载运算符'<<'时出错 - C++

Posted

技术标签:

【中文标题】实现重载运算符\'<<\'时出错 - C++【英文标题】: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);

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

【问题讨论】:

【参考方案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; 运算符的重载。这就是你看到失败的原因。

你只能做两件事

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

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

【讨论】:

以上是关于实现重载运算符'<<'时出错 - C++的主要内容,如果未能解决你的问题,请参考以下文章

重载+号运算符出错

C ++分段在进行矩阵乘法时出错

c++实现复数运算(运算符重载)

C++ 运算符重载

<链表C ++中结构成员的运算符重载

c++ 运算符重载问题