请考虑以下代码:
header.h
:
#pragma once
template<class T>
void f(T const& val);
header.cpp
:
#include "header.h"
template<class T>
void f(T const& val)
{
}
main.cpp
:
int main()
{
f(5);
}
编译器输出是一个链接错误,指出:
error LNK2019: unresolved external symbol "void __cdecl f<int>(int const &)" (??$f@H@@YAXABH@Z) referenced in function _main
我知道如果我将模板功能的主体放在header.h
中,我的问题就会解决。但为什么?为什么链接器可以找到非模板函数的主体但却找不到模板函数的主体?