头文件的重新定义错误 - cpp

时间:2017-03-09 08:51:56

标签: c++ oop templates header-files

我在命名空间下的头文件中定义了模板函数。当我在同一个项目中的两个源文件中包含此标头时。我没有得到重新定义错误。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

因为隐式模板实例化的行为就像隐式inline一样:所有这些都在链接时合并为一个。

答案 1 :(得分:0)

在内部头文件中定义Header,当您将内部头文件包含到外部文件时,将包含所有头文件。

#ifndef FILE_H
#define FILE_H

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

#endif