解决使用模板类的小错误(误区)

2019-07-16 12:30:19 浏览数 (1)

先上代码:

代码语言: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>类型是一样的.

0 人点赞