c++ 里面template 的有关问题

c++ 里面template 的问题

#include<iostream>
#include<math.h>
using namespace std;

template <class T>
class Point
{
private:
int n;
T *a;
public:
friend T EuDistance(Point<T> &p1, Point<T> &p2);
Point(T p[], int s): n(s)
{
a=new T[n=s];
for(int i=0;i<n;i++)
{
a[i]=p[i];
}
}
~Point()
{
delete [] a;
}
};

template <class T>
T EuDistance(Point<T> &p1, Point<T> &p2)   // use class template should have template argument list
{
int i=0;
T dist=0;

for(i=0;i<p1.n;i++)
{
dist=dist+(p1.a[i]-p2.a[i])*(p1.a[i]-p2.a[i]);
}

return sqrt(dist);
}

int main()
{
double a1[3]={2,2,3};
double a2[3]={1,3,7};
// int a3[2]={4,3};
// int a4[2]={2,4};

Point<double> P1(a1,3);
Point<double> P2(a2,3);
// Point<int> P3(a3,2);
// Point<int> P4(a4,2);

    cout<<EuDistance(P1,P2)<<endl;;
// cout<<EuDistance(P3,P4)<<endl;

return 0;
}




在vc++里面编译错误,  error LNK2019: unresolved external symbol "double __cdecl EuDistance(class Point<double> &,class Point<double> &)" (?EuDistance@@YANAAV?$Point@N@@0@Z) referenced in function _main

但如果我不用template 的话,就可以正常编译运行,不太明白具体是template 哪里除了问题。请大神指教啊。
C++

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

#include<iostream>
#include<math.h>
using namespace std;

//要先声明模版。。
template <class T> class Point;
template <class T>
T EuDistance(Point<T> &p1, Point<T> &p2);

template <class T>
class Point
{
private:
int n;
T *a;
public:
friend T EuDistance<T>(Point<T> &p1, Point<T> &p2);
Point(T p[], int s): n(s)
{
a=new T[n=s];
for(int i=0;i<n;i++)
{
a[i]=p[i];
}
}
~Point()
{
delete [] a;
}
};

template <class T>
T EuDistance(Point<T> &p1, Point<T> &p2)   // use class template should have template argument list
{
int i=0;
T dist=0;

for(i=0;i<p1.n;i++)
{
dist=dist+(p1.a[i]-p2.a[i])*(p1.a[i]-p2.a[i]);
}

return sqrt(dist);
}

int main()
{
double a1[3]={2,2,3};
double a2[3]={1,3,7};
// int a3[2]={4,3};