Not necessarily T as return type, but (stop me if i tell something wrong) I think you need to define the content of the function either by adding {} in the class definition or by writing the function later in the code.
Class list
{
private:
#define MAXSIZE 50
thing ar[MAXSIZE];
int number; // number of things in a.
public:
list();
bool isFull();
// returns true if the list is full, false otherwise
bool isEmpty();
// returns true if the list is empty, false otherwise
void add(thing x);
/*
purpose: add x to the list
precondition: list not full;
postcondition: list contains one more thing, i.e. x
*/
thing remove();
/*
purpose: remove one thing from the list
precondition: list not empty;
postcondition: list contains one less thing and it is returned back
*/
};
And finish the rest of the code and then change it to templates.