C++ 中抽象模板类中的类型名
typename in abstract template class in c++
我正在尝试创建一个封装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() {}
};
ArrayList是我自己的创作。
这会产生一个错误:
错误 1 错误 C2143:语法错误:在"<"
之前缺少";"我不明白,因为如果我不定义这些类型名称,它就会起作用。如果类不是抽象的,则类型名称有效,但我希望接口包含这些迭代器。
编辑:好的,我想我发现了问题,它与此代码无关。我重新创建了原始帖子,希望有人仍然会发现它有用。
你需要typedef
,而不是typename
,来制作类型别名。您还需要typename
因为它是依赖类型:
typedef typename ArrayList<T>::iterator iterator;
^^^^^^^
代码将iterator
和const_iterator
声明为数据成员,而不是类型。
你应该使用typedef typename
结构:
template <typename T> class PriorityQueueInterface
{
public:
typedef typename ArrayList<T>::iterator iterator;
typedef 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() {}
};
typename
是编译器的提示(在本例中是必需的):下一个标识符是类型名称。 typedef
用于定义新类型。
您需要
使用 typedef typename
而不是 typename
。
您编写代码的方式是告诉编译器 PriorityQueueInterface 有一个名为迭代器的成员和一个名为 const_iterator 的成员。
通过使用typedef typename
,您将告诉它它具有称为迭代器的类型和称为const_iterator
的类型。
将 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() {}
};
相关文章:
- E0322:不允许使用抽象类类型 " " 的对象
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- C++从抽象类型定义类成员
- 类型不可知的抽象以使用相同的运行时接口处理正向和反向迭代器和范围?
- 复制构造抽象类型的数据成员
- 无法分配抽象类型为"解析器"的对象
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 对"无效的抽象返回类型"进行故障排除
- 这种抽象模板矩阵类数据类型的方式好吗?
- 分配抽象类类型 c++ xcode 的对象
- C++ 2D shared_ptr数组使用抽象多态类型初始化
- 错误 - 变量类型 "X" 是一个抽象类 - c++
- 如何在 STL 容器中存储具有抽象模板类型的抽象模板化类?
- 如何在没有性能命中的情况下抽象SIMD代码来处理不同的数据类型
- 分配抽象类类型为"CObject"的对象
- 错误消息:不允许抽象类类型 "X" 的对象:纯虚拟"Y"没有覆盖器
- 派生数据类型与抽象数据类型
- 错误:不允许使用抽象类类型的对象
- 我在代码中有一个错误,错误是:(智能感知:不允许抽象类类型"HourlyWorker"的对象:)
- 是可用于 c++ 的“Django 模型”类型抽象