关于g++编译模板类的问题

本文探讨了一种使用模板类进行分离编译时遇到的问题及解决办法。作者在尝试将模板类的实现与声明分离时遇到了编译错误,并通过将实现部分移回头文件解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写了一个线性表的模板,类如下:

"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了。。。

有空再好好研究下!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值