先上代码:
代码语言:javascript复制template <class N>
代码语言:javascript复制class Complex {
代码语言:javascript复制public:
代码语言:javascript复制 Complex();
代码语言:javascript复制 Complex operator (Complex &);
代码语言:javascript复制};
代码语言:javascript复制template<class N>
代码语言:javascript复制Complex<N>::Complex()
代码语言:javascript复制{
代码语言:javascript复制}
代码语言:javascript复制template<class N>
代码语言:javascript复制Complex Complex<N>::operator (Complex &)
代码语言:javascript复制{
代码语言:javascript复制 return Complex<N>();
代码语言:javascript复制}
这样看貌似没什么问题.但是,编译过后提示了这样的错误:
代码语言:javascript复制error: use of class template 'Complex' requires template arguments
error: invalid use of template-name ‘Complex’ without an argument list
Complex Complex<N>::operator (Complex &)
错误提示说,Complex不是一个类型,有点奇怪?而且我在类内使用的时候也是使用Complex呀.怎么会这样的呢!思考了一下,哦原来在模板类里,类型也有作用域,是Complex<N>而不是Complex,吓得我快快将Complex改为Complex<N>即可.
附上正确使用方法:
代码语言:javascript复制template <class N>
代码语言:javascript复制class Complex {
代码语言:javascript复制public:
代码语言:javascript复制 Complex();
代码语言:javascript复制 Complex operator (Complex &);
代码语言:javascript复制};
代码语言:javascript复制template<class N>
代码语言:javascript复制Complex<N>::Complex()
代码语言:javascript复制{
代码语言:javascript复制}
代码语言:javascript复制template<class N>
代码语言:javascript复制Complex<N> Complex<N>::operator (Complex<N> &)
代码语言:javascript复制{
代码语言:javascript复制 return Complex<N>();
代码语言:javascript复制}
注意在类内使用的时候,由于作用域问题,Complex与Complex<N>类型是一样的.