有关模板类不能使用g++编译的问题

在尝试用g++编译包含模板类的C++程序时,遇到链接错误。问题源于模板类的声明和实现分别在.h和.cpp文件中。模板类的特殊性要求其声明和定义必须在同一处,以便编译器正确处理。解决方案是将模板类的完整定义放入头文件中,避免分开声明和实现导致的编译问题。

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

有关模板类不能使用g++编译的问题

  1. 问题描述
    今天在学习数据结构的时候,写一个矩阵类,使用到了模板,但是在编译的时候出现了如下错误。
/tmp/ccyX8J1m.o: In function `main':
test.cpp:(.text+0x31): undefined reference to `matrix<int>::matrix(int, int)'
collect2: error: ld returned 1 exit status
makefile:3: recipe for target 'tt' failed
make: *** [tt] Error 1

其中makefile文件内如下:

tt: test.cpp matrix.o
    g++ test.cpp matrix.o -o tt

matrix.o: matrix.cpp
    g++ -c matrix.cpp

clean:
    rm *.o tt

无论怎么实验,总会有上述错误

  1. 解决办法
  • 在网上找了很久的博客,最后发现错误原因是 使用g++编译模板类时,声明和实现要在一起,我一开始将声明和实现分别写到了.h和.cpp文件中
  • 参照这篇博客https://blog.youkuaiyun.com/u013049912/article/details/84936161做的解释:模板定义很特殊。由template<…>处理的任何东西都意味着编译器在当时不为它分配存储空间,它一直处于等待状态直到被一个模板实例告知。在编译器和连接器的某一处,有一机制能去掉指定模板的多重定义。所以为了容易使用,几乎总是在头文件中放置全部的模板声明和定义。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值