Я пытаюсь реализовать свой собственный шаблон / 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;
}
Тогда я получаю «;» ожидается до «*».
Попробуй это:
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;
}
или просто используйте встроенное определение, которое рекомендуется для простых методов доступа.
Вы должны определить свои функции-члены как таковые:
template <class T>
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext() {
return this->next;
}