c++ 简单的泛型错误 unresolved external symbol

来源:百度知道 编辑:UC知道 时间:2024/06/20 05:22:06
//main.cpp:

#include "Sample.h"

int main()
{
Sample<int> sample(2);
Sample<int> sample1(2);
sample.distEuclidean(sample1);
}

**********************************
//Sample.h:

#ifndef SAMPLE_H
#define SAMPLE_H

#include <cstdlib>

template <typename T>
class Sample
{
public:
double distEuclidean(Sample<T>& sample);

// ...

Sample(int dim)
{
m_dim = dim;
m_feature = NULL;
}

~Sample(){
delete[] m_feature;
}

private:
int m_dim;
T *m_feature;
};

#endif

***************************
//Sample.cpp:

#include "Sample.h"

// 求欧几里德空间距离,即x和y的距离=sqrt((x1-y1)^2 + (x2-y2)^2)
template <typename T>
double Sample<T>::distEuclidean(Sample<T>& sample)
{<

这是类模版无法分离编译吧,我也上网查过这个问题,不过结论是MS VC不管是什么版本都不支持这一点,这些编译器似乎预留了这个功能,但还没加上去。至于其他编译器我就不知道了。
补充:
类模版指的是有泛形的类,如vector,list等,你那个也是,分离编译指将该类的声明、定义、主程序分别放在不同的文件中编译,当前这种情况下,只能把类的声明和定义放到一个文件中了,我试的时候可以