我知道必须在同一个文件中声明和定义模板。但是,为什么我不能:
#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(){}
为什么?
答案 0 :(得分:1)
类模板的成员函数可以在类模板声明中内联定义。
问题中的代码:
template<typename T>
class Test{
void method(){
}
};
状态良好。问你为什么不能这样做是错误的。