test.h的代码如下
int g_funDemo(int a)
{
return 1 + 2;
}
template<typename T>
int g_fun(T mem)
{
return 1 + 2;
}
当同时有两个以上cpp文件包含test.h并调用里面的函数时
g_funDemo的定义会引起链接时出现LNK2005错误
而g_fun的定义则不会
我想不明白的是,为什么编译器不会把这两个一样的g_funDemo合并成一个处理
而是做为一个链接错误报出?
另一个问题是,为什么g_fun格式的定义就不会出现这个链接错误
编译器是怎么处理的? 在每一个.obj文件里面都生成一个static的g_fun
还是能够识别出两个cpp用同一个g_fun,而将它合并?