Я пишу класс Queue, используя шаблоны в cpp, и я хотел бы перегрузить оператор «<<».У меня есть определение вложенного класса в классе Queue, и мне нужно создать его экземпляр внутри определения оператора <<, поэтому я сделал его другом.Я не понимаю, почему компилятор не позволяет мне создавать какой-либо объект вложенного класса, несмотря на объявление функции в качестве друга.Вот код: </p>
template <class T>
class Queue
{
private:
class Cell {
....
}
};
И перегруженный оператор:
Декларация:
template <class T>
friend std::ostream& operator<<(std::ostream& os, const Queue<T>&);
Определение:
template <class T>
std::ostream& operator<<(std::ostream& os, const Queue<T>& queue) {
Cell* finder = queue.firstElement;
for (int i = 1; i < queue.size + 1; i++) {
os << i << ". " << finder->getElem() << std::endl;
finder = finder->getNext();
}
return os;
}
Я ужерешил проблему с помощью ключевого слова "auto", но я хотел бы знать, почему предыдущее решение не работает должным образом.Спасибо за любую помощь.Решение с использованием автоматического ключевого слова:
template <class T>
std::ostream& operator<<(std::ostream& os, const Queue<T>& queue) {
auto* finder = queue.firstElement;
for (int i = 1; i < queue.size + 1; i++) {
os << i << ". " << finder->getElem() << std::endl;
finder = finder->getNext();
}
return os;
}