[英]const_iterator and constness of const_iterator::value_type
[英]typedef iterator<const value_type> const_iterator;
我想从零创建一个向量,这也需要创建一个迭代器 class ,但是当我想设置一个常量迭代器时我遇到了这个问题 那是我的向量
template < class T, class Alloc = std::allocator<T> > class vector {
public:
typedef T value_type;
typedef Alloc allocator_type;
typedef T* pointer;
typedef T const * const_pointer;
typedef T& reference;
typedef T const & const_reference;
typedef iterator<value_type> iterator;
typedef iterator<const value_type> const_iterator;
typedef reverse_iterator<iterator> reverse_iterator;
// typedef reverse_iterator<const_iterator> const_reverse_iterator;
typedef typename allocator_type::size_type size_type;
typedef typename allocator_type::difference_type difference_type;
这就是我的迭代器 class
template <class T> class iterator {
protected:
T* m_ptr;
public:
typedef T value_type;
typedef value_type* pointer;
typedef value_type* const const_pointer;
typedef value_type& reference;
typedef value_type const & const_reference;
typedef std::ptrdiff_t difference_type;
iterator() : m_ptr(nullptr) {}
iterator(pointer ptr) : m_ptr(ptr) {}
iterator(const iterator &iter) {m_ptr = iter.m_ptr;}
错误:
./vector.hpp:17:29: error: expected member name or ';' after declaration specifiers
typedef iterator<const value_type> const_iterator;
求大神帮忙,3天了,没找到解决办法,谢谢
您正在尝试将模板重新定义为具体类型:
typedef iterator<value_type> iterator;
我建议将 class 模板重命名为其他内容,例如iterator_impl
:
template <class T> class iterator_impl {
protected:
T* m_ptr;
public:
typedef T value_type;
typedef value_type* pointer;
typedef value_type* const const_pointer;
typedef value_type& reference;
typedef value_type const & const_reference;
typedef std::ptrdiff_t difference_type;
iterator_impl() : m_ptr(nullptr) {}
iterator_impl(pointer ptr) : m_ptr(ptr) {}
iterator_impl(const iterator_impl &iter) : m_ptr{iter.m_ptr} {}
};
然后这将起作用:
template < class T, class Alloc = std::allocator<T> > class vector {
public:
typedef T value_type;
typedef Alloc allocator_type;
typedef T* pointer;
typedef T const * const_pointer;
typedef T& reference;
typedef T const & const_reference;
typedef iterator_impl<value_type> iterator;
typedef iterator_impl<const value_type> const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
// typedef reverse_iterator<const_iterator> const_reverse_iterator;
typedef typename allocator_type::size_type size_type;
typedef typename allocator_type::difference_type difference_type;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.