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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25458977/article/details/82859550

现象: 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

猜你喜欢

转载自blog.csdn.net/qq_25458977/article/details/82859550
今日推荐