Почему дружественная функция не может получить доступ к определению вложенного класса в C ++? - PullRequest
0 голосов
/ 04 июля 2019

Я пишу класс 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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...