写了一个线性表的模板,类如下:
"List.h"
template<tyname Elem> class List{};
"AList.h"
template<typename Elem> class AList : public List<Elem>{};
本来讲AList的实现和声明分离了,实现写在AList.cc文件中
而main.cc中用到 AList<int> alist;
makefile文件如下:
Complier=g++
Alist:main.o AList.o
$(Complier) -o $@ $^
main.o:main.cc AList.h
$(Complier) -c $<
AList.o:AList.cc AList.h
$(Complier) -c $<
.PHONY:clean
clean:
rm -f *.o Alist
出现错误 unreference to AList<int>....
后来在main.cc文件中添加:#include“AList.cc”
没有错误,但是makefile文件出现的编译结果(控制台)是:
g++ -c main.cc
g++ -c -o AList.o AList.cc
g++ -o Alist main.o AList.o
就奇怪了,第二行在makefile文件中应该所g++ -c AList.cc的,怎么会是g++ -c -o AList.o AList.cc,肯定是g++编译的时候出问题了吧?
后来在网上看到说g++不支持模板分离编译,所以就吧AList.cc的东西移到了AList.h中,然后就OK了。。。
有空再好好研究下!!!