|
C++模板的定义和使用是否必须在同一个文件中?
我的程序如下:
$ cat sorttest.h
#ifndef SORTTEST_H_
#define SORTTEST_H_
template<class T>
void Swap(T& a,T& b);
template<class T>
void Bubble(T a[],int n);
template<class T>
void BubbleSort(T a[],int n);
#endif
$ cat sorttest.cpp
#include "sorttest.h"
#include <iostream>
using namespace std;
int main()
{
int a[]={13,12,14,11};
BubbleSort(a,4);
for(int i=0;i<4;i++)
cout<<"a["<<i<<"]="<<a<<endl;
return 0;
}
$ cat Swap.cpp
template<class T>
void Swap(T& a,T& b)
{
T c;
c=a;
a=b;
b=c;
}
$ cat BubbleSort.cpp
#include "sorttest.h"
#include <iostream>
using namespace std;
template<class T>
void Bubble(T a[],int n)
{
for(int i=0;i<n-1;i++)
if(a>a[i+1])
Swap(a,a[i+1]);
}
template<class T>
void BubbleSort(T a[],int n)
{
for(int i=n;i>1;i--)
Bubble(a,i);
}
$ cat Makefile
OBJ=BubbleSort.o Swap.o sorttest.o
sorttest(OBJ)
g++ -o sorttest $(OBJ)
Swap.o:Swap.cpp
g++ -c Swap.cpp
BubbleSort.o:BubbleSort.cpp
g++ -c BubbleSort.cpp
sorttest.o:sorttest.cpp sorttest.h
g++ -c sorttest.cpp
编译的结果,出错!
g++ -c BubbleSort.cpp
g++ -o sorttest BubbleSort.o Swap.o sorttest.o
sorttest.o(.text+0x3b): In function `main':
: undefined reference to `void BubbleSort<int>(int*, int)'
collect2: ld returned 1 exit status
请各位高手帮我分析一下,这个错误是什么意思?
是Makefile有错误还是template跟实现部分只能在同一个文件中? |
|