莫名其妙,求指教啊。
我在一个用到模板的项目里面遇到这样一个问题:修改源文件并编译,然后运行,这时候总是显示项目已过期,重新生成,结果生成的是修改之前的版本,相当于没法修改。在模板里面有这个问题,模板外面就没有,为什么呀?
自己捉摸了好久好久终于找到问题大概在哪了:
《C++ primer》上面有这么一段话:“当编译器看到模板定义的时候,它不立即产生代码。只有在看到用到模板时,如调用了函数模板或定义了类模板的对象的时候,编译器才产生特定类型的模板实例。”
问题就出在我原来这个项目是编译过的,VC保存那些编译后的文件,而且当同一个项目中的文件产生更改的时候,VC只重新编译那些更改过的文件。而我只更改了定义模板的文件,在引用这个模板的文件里没有更改,这是不是就导致了链接时出现问题?具体细节我也不太清楚,只知道大概就是这么回事,因为只要重新生成整个项目,或者在引用的文件里也动一下手脚让它重新编译,就没有这个问题了。