c ++中抽象模板类中的typename

Reg*_*gic 1 c++ interface typename

我正在尝试创建一个封装MinPriorityQueue和MaxPriorityQueue的接口.两者都有一个迭代器和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() {}
};
Run Code Online (Sandbox Code Playgroud)


ArrayList是我自己创建的.

这给出了一个错误:
错误1错误C2143:语法错误:缺少';' 在'<'之前
我不明白,因为如果我没有定义那些类型名称它就有效.如果类不是抽象的,则类型名称可以工作,但我希望接口包含这些迭代器.

编辑:好的,我想我发现了问题,它与此代码无关.我重新创建了原始帖子,我希望有人仍然觉得它很有用.

Mik*_*our 5

您需要typedef而不是typename创建类型别名.你还需要typename它,因为它是一个依赖类型:

typedef typename ArrayList<T>::iterator iterator;
^^^^^^^
Run Code Online (Sandbox Code Playgroud)

您的代码声明iterator并且const_iterator是数据成员,而不是类型.