为什么会出现int类型的值不能用于初始化int*类型的实体?

重载[]时定义了指针,为什么会出现int类型的值不能用于初始化int*类型的实体?
#include
#include
using namespace std;
template
class array{
public:
T *ptr;
int size;//用于计算数组个数;
int length() const {
return size;//返回数组个数
}
T & operator [](int i){
return this->ptr[i];//重载[]用于根据下标访问某个数组元素
}
friend ostream& operator<<(ostream& os, array& a)
{
for (int i = 0; i < a.length(); i++) {
os << a[i] << " ";
}
os << endl;
return os;
}
friend istream& operator >>(istream& is, array& a)
{
for (int i = 0; i < a.length(); i++) {
is >> a[i];
}
return is;
}
bool operator > (array& a){
int m,n;
for(i=0;i<a.length();i++){
if(a[m]>a[n])
return a[m]>a[n];
}
}
};
template
void compare(T s[], int n){
int i,j,min;
T tmp;
for(i=0;i<n-1;i++){
min=i;
for(j=i+1;j<n;j++){
if(s[min]>s[j]) min=j;
tmp=s[min];
s[min]=s[i];
s[i]=tmp;
}
}
}
int main(){
int i,j;
arraya[4]={0,2,3,1};
cout << a->length();
for(i=0;i<4;i++){
cout << a[i];
}

}

想要实现数组类模板排序