Для образовательных целей я пытаюсь реализовать что-то вроде std-контейнера. Но я застрял в объявлении функции шаблона. Нужна помощь с синтаксисомОбъект возврата шаблона в функции члена шаблона класса шаблона
Error: error C2039: 'Begin' : is not a member of 'SinglyLinkedList<T>'.
заголовок:
template<class T>
class SinglyLinkedList
{
public:
typedef Iterator<T> Iterator;
SinglyLinkedList();
SinglyLinkedList(const SinglyLinkedList & other);
~SinglyLinkedList();
bool IsEmpty() { return !m_pHead }
void PushFront(T data);
T & Front();
void PopFront();
void Clean();
Iterator<T> Begin(); //Error
// Iterator<T> End();
// Iterator<T> Delete(Iterator<T> it);
private:
Node<T> * m_pHead;
};
CPP файл:
template<class T>
Iterator<T> SinglyLinkedList<T>::Begin()
{
}
EDIT:
typedef Iterator<T> Iterator;
просто ЬурейеЕ так я могу используйте SinglyLinkedList :: Итератор для Итератора. У меня есть класс итератора/Это выглядит следующим образом:
template<class T>
class Iterator
{
friend SinglyLinkedList<T>;
public:
Iterator() : m_pLinkedList(0), m_pNode(0) {}
~Iterator(){};
private:
Iterator(SinglyLinkedList<T> * pLinkedList, Node<T> * pNode) : m_pLinkedList(pLinkedList), m_pNode(pNode) {}
SinglyLinkedList<T> * GetListPtr() { return m_pLinkedList; }
Node<T> * GetNodePtr() { return m_pNode; }
void SetListPtr(SinglyLinkedList<T> * pList) { m_pLinkedList = pList; }
void SetNodePtr(Node<T> * pNode) { m_pNode = pNode; }
SinglyLinkedList<T> * m_pLinkedList;
Node<T> * m_pNode;
public:
//some overloaded operators
};
Просто наблюдение, но вы должны использовать 'SinglyLinkedList :: итератор SinglyLinkedList :: Begin() {}' вместо того, что у вас есть –
только наблюдение, [попытаться положить, что в файле .h] (HTTP: //stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file). – WhozCraig
@CaptainObvlious Как и типы, все должно быть хорошо, если они должным образом учитываются. То есть внеклассный def * мог бы * использовать 'Iterator', а в классе decl мог использовать либо' Iterator', либо ':: Iterator ' [См. live] (http://ideone.com/feyz99) (или я неправильно понял ваше заявление). Независимо от того, я бы сделал это, как вы описываете только для моего собственного здравомыслия. –
WhozCraig