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)
{<
#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等,你那个也是,分离编译指将该类的声明、定义、主程序分别放在不同的文件中编译,当前这种情况下,只能把类的声明和定义放到一个文件中了,我试的时候可以