Проблема с областью видимости, при возвращение встроенного класса

Решил написать связный список. У меня есть встроенный класс Node и private функция в самом списке getNode(), которая возвращает Node*. Так вот при определение этой функции вне класса получаю миллион разных ошибок. Подскажите пожалуйста что исправить.

P.S остальные методы определены и корректно компилируются

template <typename T>
class DoubleLinkedList
{
public:
    bool add(const T& value);
    bool remove(const size_t index);
    bool insert(const size_t index, const T& value);
    T get(const size_t);
    size_t getSize();
    bool isEmpty();
    T operator [] (const size_t index);
    DoubleLinkedList() :head(new Node()), tail(head), size(0) {}
    ~DoubleLinkedList();
    class Node
    {
    public:
        T data;
        Node* prevNode;
        Node* nextNode;
        Node() :prevNode(nullptr), nextNode(nullptr) {}
        Node(const T& data, Node* tail)
        {
            tail->nextNode = this;
            this->data = data;
            this->prevNode = tail;
            this->nextNode = nullptr;
        }
    };
private:
    Node* head;
    Node* tail;
    size_t size;
    Node* getNodeByIndex(size_t);

};

template <typename T>
DoubleLinkedList<T>::Node* DoubleLinkedList<T>::getNodeByIndex(size_t index)
{
    if (index < 0 || index >= size)
        throw out_of_range("Error: Out of range\n");
    Node* currentNode;
    if (index < size / 2)
    {
        currentNode = head;
        size_t currentIndex = 0;
        while (currentIndex != index)
        {
            currentNode = currentNode->nextNode;
            currentIndex++;
        }
    }
    else
    {
        currentNode = tail;
        size_t currentIndex = size - 1;
        while (currentIndex != index)
        {
            currentNode = currentNode->prevNode;
            currentIndex--;
        }
    }
    return currentNode;
}

введите сюда описание изображения


Ответы (0 шт):