簡體   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