仅使用头文件编译C++ .lib?

Dan*_*Dan 8 c++ code-organization

我正在编译一个C++静态库,并且由于所有类都是模板化的,所以类定义和实现都在头文件中.结果,似乎(在visual studio 2005下)我需要创建一个包含所有其他头文件的.cpp文件,以便它能够正确地编译到库中.

为什么是这样?

sha*_*kin 8

编译器不编译头文件,因为这些文件应包含在源文件中.在进行任何编译之前,预处理器会从任何包含的头文件中获取所有代码,并将代码放入包含它们的源文件中.如果编译器也应该编译头文件,那么你可以在很多方面有多个定义.

例如,这是预处理器看到的内容:

[foo.h]
void foo();
Run Code Online (Sandbox Code Playgroud)

-

[mysource.cpp]
#include "foo.h"

int main()
{
   foo();
}
Run Code Online (Sandbox Code Playgroud)

这就是编译器所看到的:

[mysource.cpp]
void foo();

int main()
{
   foo();
}
Run Code Online (Sandbox Code Playgroud)