前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决使用模板类的小错误(误区)

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

作者头像
Qt君
修改2019-07-16 12:30:19
1.1K0
修改2019-07-16 12:30:19
举报
文章被收录于专栏:跟Qt君学编程

先上代码:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档