Решено: Проблема с шаблонами классов (С++)

Модератор: Модераторы разделов

sdukshis
Сообщения: 83
ОС: Linux

Решено: Проблема с шаблонами классов

Сообщение sdukshis »

Добрый день.

Есть вот такой код на С++

Код: Выделить всё

#ifndef TEMPL_HPP
#define TEMPL_HPP

#include <cstdlib>


template<class T>
class List{
private:

    class Node{
               T data;
               Node* next;
               Node(T dat):data(dat),next(NULL){};

                  friend class List<T>;
    };


    typedef Node* lnode;

    lnode head;

public:
    List():head(NULL){};
    ~List(){};


    lnode push_front(T);
};

template<class T>
List<T>::lnode List<T>::push_front(T dat){  //Строчка 32
    return head;
};


#endif


Т.е. объявляется габлон класса. Далее определение метода push_front выноситься за объявление класса и при этом возникает следующая обибка компиляции:

Код: Выделить всё

templ.hpp:32: error: expected constructor, destructor, or type conversion before ‘List’

Ошибки получается избежать если определять функцию внутри класса или если сделать класс Node, не вложенным, а дружественным. Но всю равно не понимаю почему не проходит приведенный выше вариант.
Может кто-нибудь сможет объяснить, в чем смысл ошибки.
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: Решено: Проблема с шаблонами классов

Сообщение mikluxo »

может не в тему посмотрите здесь(ситуация та же, только там без шаблонов):
http://publib.boulder.ibm.com/infocenter/l...ref/cplr061.htm
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
sdukshis
Сообщения: 83
ОС: Linux

Re: Решено: Проблема с шаблонами классов

Сообщение sdukshis »

Нашел ответ на свой вопрос. Надо было явно указать компилятору, что я имею в виду тип таким образом:

template<class T>
typename List<T>::lnode List<T>::push_front(T dat){ //Строчка 32
return head;
};
Спасибо сказали: