![]() |
1
2
将代码拆分为头文件和源文件的原因是,声明和实现是分开的。编译器可以将源文件(编译单元)转换为目标文件,而其他希望使用类和函数的编译单元只包含头文件,并链接目标文件。这样,代码只需编译一次,并且可以通过链接重用。
模板的问题是,只要没有为模板提供参数,编译器就无法编译它们。用不同参数实例化同一个模板会导致不同的类型。
正如@Gabriel Schreiber在 his answer ,您可以告诉编译器他应该使用一组特定的参数来编译模板,只需通过链接就可以让其他编译单元使用这些参数。但是,这不会使模板可用于其他参数集。 |
![]() |
2
3
基本上,所有模板化的代码都应该在一个头中定义,否则它将不会被构建,因为编译单元中没有使用它。 每个cpp文件被编译为一个单独的单元,因此不编译构造函数和析构函数。编译器无法知道您将在中使用哪种类型的模板参数主.cpp当它编译时时间序列.cpp. |
![]() |
3
1
编译器编译时时间序列.cpp它不知道需要哪个类型的模板,因为它在另一个源文件中使用。你需要明确地告诉编译器。 阅读Stroustrup副本或互联网上的显式模板实例化。 |