So i'm trying to convert a postfix expression to an expression tree and print it. I have the following classes. In the main, I have never really understood how to properly declare stuff. Im getting errors saying the function i used in main has not been declared and such. Any explanation would be appreciated

Code:
template<class object>
class TreeNode
{
  object element;
  TreeNode *left;
  TreeNode *right;
  TreeNode(const object &theElement, TreeNode *lt, TreeNode *rt):
    element(theElement), left(lt), right(rt){}
};
template<class object>
class Stack
{
public:
  Stack();
  ~Stack();
  bool isEmpty();
  TreeNode<object> *top();
  void makeEmpty();
  void pop();
  void push(TreeNode<object> *info);
  TreeNode<object> *topAndPop();
  void posttotree(string, TreeNode<object>*&);
private:
  struct ListNode {
    TreeNode<object> * element;
    ListNode *next;
    ListNode(const object &theElement, ListNode *n=NULL):
      element(theElement), next(n) {}
  };
  ListNode *topofstack;
};

int main()
{
  string postfix;
  TreeNode<object> *T;  // not properly declared
  cout << "Enter postfix expression:" << endl;
  cin >> postfix;
  posttotree(postfix, *T);   // function not declared?
  return 0;
}