为什么必须在课外定义模板

时间:2016-04-21 15:16:17

标签: c++

我知道必须在同一个文件中声明和定义模板。但是,为什么我不能:

#ifndef guard
#define guard
template<typename T>
class Test{
   void method(){

   }
}; 
#endif

它导致编译器错误(不是直接但是instatantiation模板测试在两个不同的地方 - 例如在main()和任何类中的字段导致错误。

必须在课外定义(这不会导致错误)

#ifndef guard
#define guard
template<typename T>
class Test{
   void method();

}; 
#endif
template<typename T>
void Test<T>::method(){}

为什么?

1 个答案:

答案 0 :(得分:1)

类模板的成员函数可以在类模板声明中内联定义。

问题中的代码:

template<typename T>
class Test{
   void method(){

   }
};

状态良好。问你为什么不能这样做是错误的。