0

我目前正在尝试重载 '<<' 运算符,但一直收到此错误消息:

在函数 'std::ostream& operator<<(std::ostream&, const :Linkedlist&)': Linkedlist.cpp:148:34: error: no match for 'operator<<' in 'std::operator<< [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator](((std::basic_ostream&)((std::ostream*)outs)), ((const std::basic_string&)((const std ::basic_string*)(& Node::node::fetchData()())))) << " "' Linkedlist.cpp:142:15: 注意:候选是:std::ostream& operator<<(std: :ostream&, const 链表&)

重载的运算符函数在 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);

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

4

2 回答 2

0

你的 cursor->fetchData() 返回一个 std::string 吗?如果是这样,您必须#include <string>. 或者,尝试

outs << cursor->fetchData().c_str() << " ";
于 2012-08-26T11:55:12.833 回答
0

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

从外观上看,似乎fetchData()返回的东西没有std::ostream::<<.

当您输出到一个std::ostream实例时,所有组件都必须具有定义的行为。例如,在下面的示例中,<<要使用 的实例A,运算符必须x直接使用或B需要定义一些行为,其中它推送标准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()返回一个没有<<运算符重载的类型。这就是你看到失败的原因。

你只能做两件事

  1. 确保返回的类型fetchData()具有 的重载<<。C++ 本机和字符串类型 (in <string>) 已经具有此功能。如果它是自定义类型,那么您必须为该类型编写重载。
  2. 从 中返回一个字符串fetchData。这样你就可以利用in的std::string重载。<<<string>

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

于 2021-12-17T05:22:28.583 回答