在模板的情况下包含头文件.

Avi*_*mar 2 c++ templates header-files

当我们创建一个类时,我们在头文件中声明它的函数并在源文件中定义它们......然后头文件可以包含在主文件中以使用该类...

但是如果我们在头文件中声明一个模板类并在.cpp文件中定义它,然后如果我们在主(包含int main)文件中包含头文件那么为什么会出现链接器错误......并且错误确实存在如果我们在主文件中包含.cpp文件(包含头文件),则不会出现...任何答案都是PLZ?

Wyz*_*a-- 5

模板实际上不会在编译器读取其源代码时生成任何目标代码; 它们(通常)仅在实际使用模板时"实例化" .因此,如果您在一个源文件中定义模板函数,并从另一个源文件中调用它,则模板函数的代码根本不会被编译:它不在第一个目标文件中,因为没有任何需要它,并且它不在第二个目标文件,因为编译器无法访问函数的定义.

您可以在头文件中定义模板函数,以便在每个转换单元中调用模板函数时,编译器可以访问其代码并可以使用适当的模板参数编译它的副本.

或者,您可以使用显式实例化:在.cpp文件中定义模板函数,并且还告诉编译器应该准确编译函数的类型.这很难维护,因为您必须跟踪程序其余部分需要哪些实例化.如果有什么要求foo<float>(),但你只明确实例化foo<int>()foo<char>(),你得到一个丢失的符号错误.

您不应该#include.cpp其他.cpp文件中的文件.只需将模板函数定义与其声明一起放在标题中即可.