0

コンパイル時に再帰的な警告があるように見えるコードのセクションがありますが、その理由は何ですか?

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

この関数を呼び出しています:

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

1 に答える 1

3

自己完結型の例を投稿していないため、これは単なる推測です。特に、 の定義はnode非常に便利です。

何らかの理由で、コンパイラは、おそらく暗黙の変換コンストラクターを使用して、その take のオーバーロードを選択するのではなく、に変換rhs.get_data()することを選択していると思います。あなたがすべき:nodeoperator<<node::value_type

  • operator << (ostream&, node::value_type)の定義の前に宣言されていることを確認してくださいoperator<<
  • nodeを受け取るコンストラクタがある場合は、予期しない暗黙の変換を避けるためvalue_typeに作成するのがおそらく最善です。explicit
于 2012-09-05T06:49:44.997 に答える