繁体   English   中英

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

[英]“recursive on all control paths, function will cause runtime stack overflow” on overloaded << operator

我有一段代码在编译时似乎有递归警告,为什么有什么主意?

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

它正在调用此函数:

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

这只是一个猜测,因为您尚未发布独立的示例。 特别地, node的定义将非常有用。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM