error: cannot convert in arguement passing
<p>I have some code like this:</p>

<pre><code>template &lt;class Item,class Key&gt;
class bst
{
 public:
  //bst(const Item&amp; new_item,const Key&amp; new_key);

  Key get_key() const {return key;};
  Item get_item() const {return item;};
  bst get_right() const {return *rightPtr;};
  bst get_left() const {return *leftPtr;};

  void set_key(const Key&amp; new_key) {key = new_key;};
  void set_item(const Item&amp; new_item) {item = new_item;};
  void set_right(bst *new_right) {rightPtr=new_right;};
  void set_left(bst *new_left) {leftPtr=new_left;};

  Item item;
  Key key;
  bst *rightPtr;
  bst *leftPtr;
 private:
};


template &lt;class Item,class Key,class Process,class Param&gt;
void inorder_processing_param(bst&lt;Item,Key&gt; *root,Process f,Param p)
{
  if(root==NULL)
    {return;}
  else
    {
      inorder_processing(root-&gt;leftPtr,f,p);
      f(root-&gt;item,p);
      inorder_processing(root-&gt;rightPtr,f,p);
    }
}

void perfect(studentRecord s)
{
if (s.GPA==4.0)
  {
    cout &lt;&lt; s.id &lt;&lt; "  " &lt;&lt; s.student_name;
  }
}

void major_m(bst&lt;studentRecord,int&gt;* root)
{
if (root-&gt;item.major=="m")
  {
    cout &lt;&lt; root-&gt;item.id &lt;&lt; "  " &lt;&lt; root-&gt;item.student_name;
  }
}

void print_major(bst&lt;studentRecord,int&gt;* root,char* m)
{
    inorder_processing(root,major_m);
}
</code></pre>

<p>it make this error when i run it:</p>

<pre><code>bst.template: In function `void inorder_processing(bst&lt;Item, Key&gt;*, Process) 
   [with Item = studentRecord, Key = int, Process = void (*)(bst&lt;studentRecord, 
   int&gt;*)]':
studentDatabase.cxx:97:   instantiated from here
bst.template:151: error: cannot convert `studentRecord' to `bst&lt;studentRecord, 
   int&gt;*' in argument passing
</code></pre>

<p>how do i fix it</p>
