模板类成员函数特例化写法

现象: vs编译出现错误,即对函数ReleaseByOwner()进行了重定义;

解决: 先说一下我的开发背景:

原因: 在文件calibdt_array.h中定义了类Array,并声明了类内函数ReleaseByOwner(T **data())如下:

仅仅是声明,并未进行实现,同时在文件ring_circle_board_detector.h中进行了类的特例化实现,即对Array中ReleaseByOwner()函数进行了具体的实现,如下: 

同时又在schneider_detect.h中进行了另一种实现:

这两种实现都属于类外的实现,即对Array类内的函数进行的特例化实现,理论上没有问题,但是,

因为在文件calibdt_array.h中,函数只有声明,没有定义,因此默认在类外进行定义,这时类外的定义就会和类外的特例化函数发生冲突,

即都是对函数ReleaseByOwner() 的重定义,因此会报错;

修改: 

将类内函数的声明改为定义,即修改如下: 

这样就相当与在类内进行实现,同时在类外进行特例化,就不会出现编译错误;

具体解答如下:

因此,这个问题,如果不加 {}, 将函数声明为inline也是可以解决;

参考网页:

模板类成员函数特例化写法: https://blog.csdn.net/zkzk12345/article/details/6602351

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值