error: expected nested-name-specifier before 'const_iter' 的解答

今天第一篇博文,以后就通过博客来多多积累学习经验了!大笑

关于这种报错如今天遇到的 error: expected nested-name-specifier before 'const_iter'    ,

 friend ostream & operator <<(ostream & out,const Array<T>&aa){
        out<<"[";
       typename  const_iter it=aa.begin();
        if(it!=aa.end()){
            out<<*it;

        if(it!=aa.end()){
            for(;it<aa.end();it++)
            out<<","<<*it;
        }
这部分中编译就出错:
E:\iterm\A.h:56: error: expected nested-name-specifier before 'const_iter'
        typename  const_iter it=aa.begin();
                  ^
后来发现,关于模板中的typename 不能乱用,其目的在于表示相关的类类型的迭代器的返回值。
<pre name="code" class="html">template<typename T>
class A_iterator{
public:

    A_iterator(){
    }//constructor

    A_iterator(typename list<T>::iterator it){
        this->it = it;
    }//construtor with index

   typename  list<T>::iterator getIt() const{
        return it;
    }//function getIt

    T& operator*(){
        return *it;
    }//overloading operator *

    typename list<T>::iterator& operator++(){
        ++it;
        return it;
    }//overloading operator ++
   typename list<T>::iterator  operator++(int){
        list<int>::iterator old = it;
        it++;
        return old;
    }//overloding operator ++ in back sequnce
    bool operator!=(const A_iterator& b){
        return it!=b.getIt();
    }//overloading operator !=
    bool operator==(const A_iterator& b){
        return it==b.getIt();
    }//overloding operator ==

private:
 typename list<T>::iterator it;
};


 
类似这种形式是我在一个类中使用typename用来表示这种返回与类型相同的类型。 

因为std::list<T>在实例化之前,编译器没办法判断iterator到底是成员还是类型,所以会出错。 

在std::list<T>::iterator前加上typename关键字就行了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值