27

在编译期间,我收到“多重定义”错误,它指的是头文件中的模板特化。我需要将专业化放入源文件吗?

4

2 回答 2

31

如果它是您专门化的功能,您可以将它们放在 .cpp 文件中,或者将它们内联在标题中。

就像 James 指出的那样,如果你不使函数内联,你仍然必须在标题中声明特化。否则编译器不知道它必须在别处寻找它们。

然后,您可以将实现(定义)放入 .cpp 文件中。就像其他功能一样。

于 2012-08-02T08:52:08.547 回答
11

不,您不需要将特化放在单独编译的文件中,但是,您需要注意特化函数模板只是普通函数,因为它是完全特化的。

因此,除非声明它,否则它不能在多个翻译单元中定义inline

于 2012-08-02T08:50:17.100 回答