использование шаблона класса требует списка аргументов шаблона, вложенных классов

Я пытаюсь реализовать свой собственный шаблон / ArrayList, и я столкнулся с загадкой. Я знаю, что ошибка происходит из-за отсутствия где-то в списке аргументов, но для меня я не могу понять это здесь, я получаю другую ошибку, если я делаю. Для краткости я удалил функции, которые я не могу отладить, пока эта не будет отлажена первой.

//ArrayList.h//

#include <iostream>
#include <string>

using namespace std;

template <class T>
class ArrayList {
private:
class Node {
private:
Node* next;
Node* prev;
T* element;
public:
Node();
Node( T* );
Node( Node* /*new prev*/, T* );
~Node();
void setNext( Node* );
Node* getNext();
};
int size;
int maxSize;
int current_index;
Node* myArrayList;

Node* curr;
Node* head;
Node* tail;
public:
};

Реализация «Node * getNext ();» в моем файле cpp.

//ArrayList.cpp//

#include "arraylist.h"
...

template <class T>
ArrayList::Node* ArrayList::Node::getNext() {
return this->next;
}

Попытка вставить позади :: не сработала очень хорошо … Узел * становится неопределенным, если я поставлю перед ним.

template <class T>
ArrayList<T>::Node* ArrayList::Node::getNext() {
return this->next;
}

Тогда я получаю «;» ожидается до «*».

0

Решение

Попробуй это:

template <class T>
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext()
{
return this->next;
}

Или в C ++ 11 (демонстрация):

template <class T>
auto ArrayList<T>::Node::getNext() -> Node*
{
return this->next;
}

или просто используйте встроенное определение, которое рекомендуется для простых методов доступа.

2

Другие решения

Вы должны определить свои функции-члены как таковые:

template <class T>
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext() {
return this->next;
}
1

По вопросам рекламы [email protected]