2016-04-17 4 views
2

このスコープ(私は関連部分のみを残す)で宣言されていなかった。は、 '開始' 私はそのようなクラスを持っている

MyList<Foo*> foo; 
for(Foo* f : foo.skip(1)) { 

I:私はクラスを使用するために行ってきました

template<class T> 
    class MyList 
    { 
    public: 
    // .... 

    typename QList<T*>::iterator begin() 
    { 
     return list.begin(); 
    } 

    typename QList<T*>::iterator end() 
    { 
     return list.end(); 
    } 

    typename QList<T*>::iterator skip(int n) 
     { 
      auto ite = list.begin(); 

      while(n --> 0) 
       ++ite; 

      return ite; 
     } 

     QList<T*> list; 
    }; 

このエラーが発生します:

私はskip()呼び出しを削除しますが、ループはうまくいきます...なぜか分かりません。なぜそれをどうやって解決するのですか?

答えて

4

これは、C++での範囲ベースのforループの動作方法です。特に、範囲式で参加者がクラスタイプである場合、MyListの式が正当なものであるためには、クラスタイプにメンバーbeginendが定義されている必要があります。

メンバー関数MyList::skipは、イテレータをQList<T*>に返します。この反復子クラスではbeginendのメンバーが定義されておらず、コンパイラは範囲ベースのforループ式の正規の参加者ではなく、この型(イテレータ)をレンダリングします。のメンバーがbeginおよびendである正規化された。

range-forループの詳細については、hereを参照してください。

+0

C++とQtのイテレータを混乱させました。 – Jack

関連する問題