我想从零创建一个 vector ,这也需要创建一个迭代器类,但是当我想设置一个常量迭代器时我遇到了这个问题 这是我的 vector
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;
这是我的迭代器类
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;
我该如何解决这个问题?
最佳答案
您正在尝试将模板重新定义为具体类型:
typedef iterator<value_type> iterator;
我建议将类模板重命名为其他名称,例如 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;
};
关于c++ - "typedef iterator<const value_type> const_iterator;"结果为 : "error: expected member name or ' ; ' after declaration specifiers",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73797874/