0

以下のコードをコンパイルしようとしましたが、エラーが表示されます。期待されているテンプレート名がわかりません。これは初めてで、これは新しい g++ コンパイラでコンパイルされる非常に古いコードです。誰でも助けてもらえますか?

よろしくお願いします。

エラー:

./dir.h:12: error: expected template-name before â<â token
./dir.h:12: error: expected â{â before â<â token
./dir.h:12: error: expected unqualified-id before â<â token
make: *** exit code 1 making Life.o

コード:

#if !defined(DIRECTORY_H)
#define DIRECTORY_H
#include <string>
#include <algorithm>
#include <iterator>

//using std::input_iterator;

using std::string;

    struct dir_it_rep;
    class dir_it : public input_iterator<string,int>  //<------- Line 12
    {
    public:
      dir_it();                              // "past the end" ctor
      explicit dir_it(string const &);       // the "normal" ctor
      dir_it(dir_it const &it);
      ~dir_it();

      dir_it &operator= (dir_it const &it);

      string operator* () const { return i_value; }

      dir_it &operator++ ();
      dir_it operator++ (int) { dir_it rc (*this); operator++(); return rc; }

      bool operator== (dir_it const &it) const;
      bool operator!= (dir_it const &it) const { return !operator== (it); }

    private:
      dir_it_rep *i_rep;    // representation for the next value
      string     i_value;   // the current value
    };




#endif /* DIRECTORY_H */
4

1 に答える 1

0

まず: ありませんstd::input_iterator。2 番目: イテレータは、クラス階層ではなく、概念によって設計されます。
標準ライブラリは、std::iterator反復子に共通の互換性のあるインターフェイスを提供する (つまり、物事を単純化する) 基本クラスを提供します。しかし、さまざまなタイプの反復子は、特定の反復子カテゴリに属する​​ために独自の反復子実装が満たさなければならない概念にすぎません

つまり、さまざまなイテレーター カテゴリ (前方イテレーター、入力イテレーター、双方向イテレーター) は、単なるクラスの概念です。つまり、たとえば、前方反復子と見なされるクラスを作成する場合、クラスは条件/機能のリストを満たす必要があります。

  • クラスはデフォルトで構築可能でなければなりません。

  • クラスもInputIterator の概念を満たしている必要があります。

  • 指定された一連の動作を満たすプリインクリメント演算子とポストインクリメント演算子をオーバーロードする必要があります (ドキュメントを参照してください)。

  • クラスは参照解除可能、つまりオーバーロード可能である必要がありますoperator*()

これForwardIteratorは、概念の要件を説明するドキュメントです。

また、標準ライブラリは、イテレータ クラスのカテゴリを決定する「タグ」として機能するクラスのセットを提供します (イテレータはクラス階層ではないため、イテレータのカテゴリを確認するために間接形式が必要です。一般的なケースでは、イテレータを一般的な方法で使用するため、これは心配ありません): http://en.cppreference.com/w/cpp/iterator/iterator_tags

iterators ライブラリに関するドキュメントを読んでください。Iterators、その設計、およびその概念についての適切な説明を提供します。

于 2013-09-17T09:25:50.550 に答える