头文件重定义错误 - cpp
问题描述:
我有一个模板函数在名称空间下的头文件中定义。当我将这个头文件包含在同一个项目中的两个源文件中时。我不会重新定义错误。头文件重定义错误 - cpp
/* template.h */
namespace x
{
template<typename T>
function(t)
{
/* implementation */
}
}
/*test.cpp*/
#include "template.h"
/* test2.cpp */
#inlcude "template.h"
在上述情况下,我没有得到任何重新定义错误。为什么我没有收到任何错误?
答
因为隐式模板实例的行为就好像它们是隐式的inline
:它们都在链接时合并为一个。
答
在内部头文件中定义好标题时,如果将内部头文件包含到外部文件中,则将包含所有标题。
#ifndef FILE_H
#define FILE_H
/* ... Declarations etc here ... */
#endif
这是因为您没有在头文件中定义*函数*,所以定义了一个函数* template *。我建议你阅读例如[为什么只能在头文件中实现模板?](http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file)获取更多信息。 –
我不明白 - 你问为什么你没有得到错误?或者是什么?由于头文件在每个cpp文件中都包含一次,所以没有重定义 - 每个cpp只能看到这个头文件一次,所以没关系...... –
当我在多个源文件中包含template.h时会发生什么情况@Someprogrammerdude –