«рекурсивная на всех путях управления, функция вызовет переполнение стека во время выполнения» на перегруженном & lt; & lt; оператор

У меня есть фрагмент кода, который, кажется, имеет рекурсивное предупреждение при компиляции, есть идеи, почему?

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

Это вызывает эту функцию:

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

0

Решение

Это всего лишь предположение, так как вы не опубликовали отдельный пример. В частности, определение node было бы очень полезно.

Я думаю, что по какой-то причине компилятор выбирает конвертировать rhs.get_data() в node, вероятно, используя неявный конструктор преобразования, а не выбрав перегрузку operator<< это занимает node::value_type, Вам следует:

  • Удостоверься что operator << (ostream&, node::value_type) был объявлен до вашего определения operator<<
  • Если node имеет конструктор, который принимает value_typeтогда, наверное, лучше сделать это explicit чтобы избежать неожиданных неявных преобразований.
3

Другие решения

Других решений пока нет …