Как правильно объявлять функции для работы с закрытой структурой в классе

Рейтинг: 0Ответов: 1Опубликовано: 03.06.2011
template <class SetType> class set{
public:
    ...
private:
    ...

    struct list{//структура, в которой хранятся элементы множеств
        SetType key;
        list *next;
    };
    list *root;
    list *head;

    //функции для работы со списком
    list *search(SetType key);//поиск элемента в списке
    list *search(set<SetType> &ob, SetType key);//поиск элемента в списке
    list *search_el(SetType id);//проверка множества на уникальность элементов
    ...
};

при компиляции вылетает 3 ошибки

"expected constructor destructor or type conversion before '*' token"

и относятся к такой записи

template <class SetType> set<SetType>::list *set<SetType>::search(SetType key){
    ...
}

http://pastebin.com/bBZSrCE4 вся программка

Ответы

▲ 2

Нашел причину. Нужно написать:

template <class SetType>
typename set<SetType>::list *set<SetType>::search(SetType key){
...
}

Это нужно для того, чтобы компилятор знал, что set<settype>::list это имя типа.