2011-04-11 59 views
-3

可能重复:
Why can templates only be implemented in the header file?为什么编译器无法找到的.cpp模板定义

我想知道,为什么一个C++编译器不能够实例化的模板如果它是在.cpp文件中定义的类?

编辑:我很抱歉,但我已经做了搜索之前,但回答这个看起来相同的问题是“编译器无法找到.cpp中的模板定义”,但不说明原因。除非我的阅读答案不好。

+1

请不要一次又一次地发布了同样的问题。答案不会有所不同。 – Jon 2011-04-11 11:19:28

+1

你读过你最后一个问题的重复内容吗?如果是这样,你应该能够使这个问题更具体。您可能还想阅读[本网站](http://www.parashift.com/c++-faq-lite/templates.html)。 – 2011-04-11 11:19:35

+0

哦,有几十个问题在StackOverflow上问这个问题!请在提问之前尝试使用搜索。 – 2011-04-11 11:19:46

回答

1

C++的常见问题说明了一切:

  1. 模板是不是一个类或函数。模板是编译器用来生成类或函数族的“模式”。
  2. 为了让编译器生成代码,它必须同时看到模板定义(不仅仅是声明)和特定类型/用于“填充”模板的内容。例如,如果您尝试使用Foo,则编译器必须同时看到Foo模板和您试图创建特定Foo的事实。
  3. 您的编译器在编译另一个.cpp文件时可能不记得一个.cpp文件的细节。它可以,但大多数不会,如果你正在阅读这个FAQ,它几乎肯定不会。顺便说一下,这被称为“独立编译模型”。

http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12

0

编译器一次处理一个.cpp文件。因此,他们能够实例化一个.cpp文件中的模板,但只有在它们被定义在同一个.cpp文件中。

相关问题