У меня есть фрагмент кода, который, кажется, имеет рекурсивное предупреждение при компиляции, есть идеи, почему?
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 чтобы избежать неожиданных неявных преобразований.Других решений пока нет …