“在所有控制路径上递归,函数将导致运行时堆栈溢出”在重载<<操作者

时间:2012-09-05 05:32:37

标签: c++ operator-overloading

我有一段代码在编译时似乎有一个递归警告,任何想法为什么?

ostream& operator << (ostream& out, const node& rhs)
    {
        out << rhs.get_data();
        return out;
    }

正在调用此函数:

node::value_type node::get_data() const
    {
        return data;
    }

1 个答案:

答案 0 :(得分:3)

这只是一个猜测,因为你没有发布一个自包含的例子。特别是,node的定义非常有用。

我认为,出于某种原因,编译器选择将rhs.get_data()转换为node,可能使用隐式转换构造函数,而不是选择需要operator<<的重载node::value_type。你应该:

  • 确保在定义operator << (ostream&, node::value_type)
  • 之前声明了operator<<
  • 如果node的构造函数需要value_type,那么最好使其explicit以避免意外的隐式转换。