原因是将 函数的定义分到两个文件中,编译时只连接到了声明,定义找不到如下
head.h
#pragma once
#include <iostream>
template<typename T>
T add(T a, T b);
head.cpp
#include "header.h"
template<typename T>
T add(T a, T b) {
return a+b;
}
在使用时add只是一个函数模板,没有实例化,找不到如何去使用,没有生成实例,因此就会报错;
解决方法:将声明和定义放到同一文件夹下,.h或者.hpp文件 ,如下
#pragma once
#include <iostream>
template<typename T>
T add(T a, T b);
template<typename T>
T add(T a, T b) {
return a+b;
}