先上代码:
template <class N>
class Complex {
public:
Complex();
Complex operator + (Complex &);
};
template<class N>
Complex<N>::Complex()
{
}
template<class N>
Complex Complex<N>::operator +(Complex &)
{
return Complex<N>();
}
这样看貌似没什么问题.但是,编译过后提示了这样的错误:
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>即可.
附上正确使用方法:
template <class N>
class Complex {
public:
Complex();
Complex operator + (Complex &);
};
template<class N>
Complex<N>::Complex()
{
}
template<class N>
Complex<N> Complex<N>::operator +(Complex<N> &)
{
return Complex<N>();
}
注意在类内使用的时候,由于作用域问题,Complex与Complex<N>类型是一样的.