c++ - "typedef iterator<const value_type> const_iterator;"结果为 : "error: expected member name or ' ; ' after declaration specifiers"

标签 c++ vector iterator containers constants

我想从零创建一个 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/

相关文章:

Scala,扩展迭代器

c++ - 显式链接 DLL 和程序挂起

c++ - 在 Xcode : -libmysqlcppconn library not found 中使用 MySQL Connector/C++

c++ - utext_openUTF8 返回字符串 "mod-12k"的错误;

vector - 在 clojure 中从两个向量创建子向量

iterator - 为什么我不能将 Path::new 映射到 std::env::args 迭代器上?

c++ - Visual Studio 2012 中的智能感知 : No members available for Inner classes in class template?

c++ - 将 vector 添加到 vector

c++ - std::vector 本身的地址稳定吗?

c++ - 删除使用 const_iterator 的 vector 的元素