Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Класс шаблонного класса не воспринимается как тип при описании метода

#cpp #шаблоны_с++


Подскажите, пожалуйста, что делать?

Ругается на этот метод :

template  LinkedList::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



Вам нужно написать template typename LinkedList::iterator LinkedList::begin() //^^^^^^ Дело в том, что LinkedList::iterator — зависимое имя, поэтому без typename не обойтись. Кроме того, не забудьте, что шаблонные классы нужно (за редкими исключениями) определять полностью в header'е, иначе готовьтесь к ошибкам компоновки.

Комментариев нет:

Отправить комментарий