template <class T>
class node{

public:
node(){linkfield = NULL;}
node(T d, node *lf){datafield = d; linkfield = lf;}

T& data(){return datafield;}
node * link(){return linkfield;}

void setData(T d){datafield = d;}
void setLink(node * lf){linkfield = lf;}

private:
T datafield;
node * linkfield;
};
I think your code is in error here because "node*" isn't a full type. You ought to be using node<T> here for all cases where you use "node". The compiler does this because in some cases you'll want
Code:
template<typename T>
struct Node {
       Node<int>* integerNode;
};
Doesn't happen often, but C++ remaims flexible in this regard.