У меня есть фрагмент кода, который, кажется, имеет рекурсивное предупреждение при компиляции, есть идеи, почему?
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 << (ostream&, node::value_type)
был объявлен до вашего определения operator<<
node
имеет конструктор, который принимает value_type
тогда, наверное, лучше сделать это explicit
чтобы избежать неожиданных неявных преобразований.Других решений пока нет …