#cpp #шаблоны_с++
Подскажите, пожалуйста, что делать? Ругается на этот метод : templateLinkedList ::iterator LinkedList ::begin(){ iterator a(this->head); return a; } Ошибка: warning C4346: LinkedList::iterator: зависимое имя не является типом Предописание класса : template class LinkedList{ class Node{ public: Node *next; Node *prev; T val; }; public: Node *head; Node *tail; public: class iterator { Node *node; iterator(Node *node); public: //Возвращает ссылку на текущий элемент коллекции. T & operator*() const; //Возвращает указатель на текущий элемент коллекции. T * operator->() const; iterator & operator++(); iterator operator++(int); iterator & operator--(); iterator operator--(int); }; LinkedList(const LinkedList & other); ~LinkedList(); iterator begin(); } Предописание класса и описание метода лежат в разных файлах, но студия на это конкретно не ругается. перенос описания в файл к предописанию класса не лечит проблему
Ответы
Ответ 1
Вам нужно написать templatetypename LinkedList ::iterator LinkedList ::begin() //^^^^^^ Дело в том, что LinkedList ::iterator — зависимое имя, поэтому без typename не обойтись. Кроме того, не забудьте, что шаблонные классы нужно (за редкими исключениями) определять полностью в header'е, иначе готовьтесь к ошибкам компоновки.
Комментариев нет:
Отправить комментарий