一个c++小程序出现了有关问题,请大家帮一下

一个c++小程序出现了问题,请大家帮一下。
#include<iostream>
using namespace std;
class TSet
{
private:
  int *m_piNumber;
  int m_iIndex;
  void sort_insert(int iNumber);
public:
TSet();
  TSet(int iNum);
  ~TSet();
  void insert(int iNumber);
  int get(int iIndex);
  int operator[](int iIndex);
  void print();
  int count();
  bool IsExist(int iNumber);
void Show(TSet p);
  friend TSet Mix(TSet p1,TSet p2,TSet p3);
friend TSet Union(TSet p1,TSet p2,TSet p3);
};
//function.cpp
#include"function.h"  

TSet::TSet()
{
m_iIndex = 0;
  m_piNumber =NULL;
}

TSet::TSet(int iNum)
{
  m_iIndex = iNum;
  m_piNumber = new int[iNum];
}

TSet::~TSet()
{
  if(m_piNumber)
  delete []m_piNumber;
}

void TSet::sort_insert(int iNumber)
{
  for(int i = 0; i < m_iIndex; i++)
  {
  if(m_piNumber[i] >= iNumber)
  {
  for(int j = m_iIndex; j > i; j--)
  {
  m_piNumber[j] = m_piNumber[j-1];
  }
  m_piNumber[i] = iNumber;
  m_iIndex++;
  return;
  }
}
  m_piNumber[m_iIndex++] = iNumber;
}

bool TSet::IsExist(int iNumber)
{
  int mid,top,bot;
  bool find = false;
  top=0;
  bot=m_iIndex-1;
  find=0;
  do
  {
  mid=(top+bot)/2;
  if(iNumber==m_piNumber[mid])
  {
  find=true;
  }
  else if(iNumber > m_piNumber[mid])
  top=mid+1;
  else  
  bot = mid -1;
  } while((top<=bot) && (find==0));
  return find;
}

int TSet::get(int iIndex)
{
  if(iIndex < 0 || iIndex>=m_iIndex)
  return 0;
  return m_piNumber[iIndex];
}

int TSet::operator[](int iIndex)
{
  if(iIndex < 0 || iIndex>=m_iIndex)
  return 0;
  return m_piNumber[iIndex];
}

void TSet::print()
{
  for(int i = 0; i < m_iIndex; i++)
  {
  cout << m_piNumber[i] << endl;
  }
}

void TSet::insert(int iNumber)
{
  if(IsExist(iNumber))
  return;
  else
  sort_insert(iNumber);
}

int TSet::count()
{
  return m_iIndex;
}

void TSet::Show (TSet p)
{
for(int i=1;i<=p.m_iIndex;i++)
cout << p[i] << endl;
}

TSet Mix(TSet p1,TSet p2,TSet p3)
{
  int cnt = p2.count();
  for(int i = 0 ; i < cnt; i++)
  {
  if(p1.IsExist(p2[i]))
  p3.insert(p2[i]);
  }
return p3;
}

TSet Union(TSet p1,TSet p2,TSet p3)
{  
  int cnt = p2.count();
  for(int i = 0 ; i < cnt; i++)
  {
  if(!p1.IsExist(p2[i]))
  p3.insert(p2[i]);
  }
  cnt =p1.count();
  for(int j= 0; j< cnt; j++)
  {
  p3.insert(p1[j]);
  }
return p3;
}
//main.cpp
#include<iostream>
#include"function.h"
using namespace std;

int main()
{  
  TSet p1,p2,p3,p4;
int m=5,n=3;
p1(m);
p2(n);
for(int i=0;i<=m;i++)
{
p1[i]=i+1;
}
for(int j=0;j<=n;j++)
{
p2[j]=j+1;
}
Mix(p1,p2,p3);
Show(p3);
Union(p1,p2,p4);
Show(p4);
return 0;
}

刚才很谢谢有位好心人帮我纠正了function.cpp中的错误,这个函数的main函数我编译时老出错,请大侠指正一下,谢谢!

------解决方案--------------------