1

MinPriorityQueue と MaxPriorityQueue をカプセル化するインターフェイスを作成しようとしています。どちらにも iterator と const_iterator があります (そのため、反復アクセスを許可しない標準ライブラリではなく、独自の優先キューが必要です)。

template <typename T> class PriorityQueueInterface
{
public:
   typename ArrayList<T>::iterator iterator;
   typename ArrayList<T>::const_iterator const_iterator;

   virtual void insert( T item ) = 0;
   virtual bool get( T key, T& value ) const = 0;
   virtual T front() const = 0;
   virtual T back() const = 0;
   virtual ~PriorityQueueInterface() {}
};


ArrayList は私が作成したものです。

これによりエラーが発生します:
エラー 1 エラー C2143: 構文エラー: ';' がありません '<' の前
は、これらの型名を定義しなくても機能するため、わかりません。クラスが抽象的でない場合、型名は機能しますが、インターフェイスにそれらの反復子を含めたいです。

編集:わかりました、私は問題を見つけたと思います。それはこのコードとは関係ありません。元の投稿を再作成しました。誰かがまだ役に立つことを願っています。

4

4 に答える 4

1

typedef typenameの代わりに使用する必要がありますtypename

コードの書き方では、PriorityQueueInterface に iterator と呼ばれるメンバーと const_iterator と呼ばれるメンバーがあることをコンパイラーに伝えています。

を使用すると、 iterator というタイプとというタイプtypedef typenameがあることがわかります。const_iterator

于 2013-09-23T11:32:32.837 に答える
-1

typename を typedef に変更します。

template <typename T> class PriorityQueueInterface
{
public:
   typedef ArrayList<T>::iterator iterator;
   typedef ArrayList<T>::const_iterator const_iterator;

   virtual void insert( T item ) = 0;
   virtual bool get( T key, T& value ) const = 0;
   virtual T front() const = 0;
   virtual T back() const = 0;
   virtual ~PriorityQueueInterface() {}
};
于 2013-09-23T11:32:56.410 に答える