头文件重定义错误 - cpp

问题描述:

我有一个模板函数在名称空间下的头文件中定义。当我将这个头文件包含在同一个项目中的两个源文件中时。我不会重新定义错误。头文件重定义错误 - cpp

/* template.h */ 
namespace x 
{ 
    template<typename T> 
    function(t) 
    { 
     /* implementation */ 
    } 
} 

/*test.cpp*/ 
#include "template.h" 

/* test2.cpp */ 
#inlcude "template.h" 

在上述情况下,我没有得到任何重新定义错误。为什么我没有收到任何错误?

+1

这是因为您没有在头文件中定义*函数*,所以定义了一个函数* template *。我建议你阅读例如[为什么只能在头文件中实现模板?](http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file)获取更多信息。 –

+0

我不明白 - 你问为什么你没有得到错误?或者是什么?由于头文件在每个cpp文件中都包含一次,所以没有重定义 - 每个cpp只能看到这个头文件一次,所以没关系...... –

+0

当我在多个源文件中包含template.h时会发生什么情况@Someprogrammerdude –

因为隐式模板实例的行为就好像它们是隐式的inline:它们都在链接时合并为一个。

在内部头文件中定义好标题时,如果将内部头文件包含到外部文件中,则将包含所有标题。

#ifndef FILE_H 
#define FILE_H 

/* ... Declarations etc here ... */ 

#endif