我正在编译一个C++静态库,并且由于所有类都是模板化的,所以类定义和实现都在头文件中.结果,似乎(在visual studio 2005下)我需要创建一个包含所有其他头文件的.cpp文件,以便它能够正确地编译到库中.
为什么是这样?
编译器不编译头文件,因为这些文件应包含在源文件中.在进行任何编译之前,预处理器会从任何包含的头文件中获取所有代码,并将代码放入包含它们的源文件中.如果编译器也应该编译头文件,那么你可以在很多方面有多个定义.
例如,这是预处理器看到的内容:
[foo.h] void foo();
-
[mysource.cpp] #include "foo.h" int main() { foo(); }
这就是编译器所看到的:
[mysource.cpp] void foo(); int main() { foo(); }