Есть вот такой код на С++
Код: Выделить всё
#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, не вложенным, а дружественным. Но всю равно не понимаю почему не проходит приведенный выше вариант.
Может кто-нибудь сможет объяснить, в чем смысл ошибки.