test.cc:76:7: error: use of class template Stack requires template arguments
const Stack& Stack<T>::operator=(const Stack<T> &s) //error is here
^
test.cc:7:7: note: template is declared here
class Stack : public Stack<T>
^
You wrote that your opreator= is returning something called "const Stack&", but there is no such type: Stack is a template, it needs something between angle brackets to become a type, such as "const Stack<T>&"
Note also
test.cc:98:12: warning: using the result of an assignment as a condition without
parentheses [-Wparentheses]
if(count = 1)
~~~~~~^~~
test.cc:98:12: note: place parentheses around the assignment to silence this
warning
if(count = 1)
^
( )
test.cc:98:12: note: use '==' to turn this assignment into an equality
comparison
if(count = 1)
^
==
and
test.cc:112:6: error: no template named 'Stacks'; did you mean 'Stack'?
void Stacks<T>::push (T data)
^~~~~~
Stack
and
test.cc:126:23: error: expected ')'
return(items[count-1];
^
test.cc:126:8: note: to match this '('
return(items[count-1];
^
not to mention that "class Stack : public Stack<T>" seems to be an error to begin with: you're apparently trying to define "template<typename T> class Stack". With your template definition, you will see a compile-time error when you attempt to instantiate a concrete Stack<int>, for example.
template <typename T>
class Stack : public Stack<T>
Does this make sense? The class extends itself?? Or it extends a class with the same name??
Another thing you should know is that you should define templated classes entirely inline (that is, the function bodies are inside the class definition). Otherwise you'll have some problems that are difficult to fix.