c++ 里面template 的有关问题
c++ 里面template 的问题
在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 哪里除了问题。请大神指教啊。
------解决方案--------------------
#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};