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