使用std :: pair类的头文件中的typedef出错

时间:2013-01-09 17:08:25

标签: c++ std header-files std-pair

我正在以类似STD的方式编写SkipList实现:使用分配器,迭代器等。整个类已经完成并且正在工作但是现在我正在尝试为我创建的类编写头文件。我当前的头文件内容是:

template<class _MySkiplist>
    class _Skiplist_const_iterator;

template<class _MySkiplist>
    class _Skiplist_iterator;

template<class _Kty,
    class _Pr,
    class _Alloc>
        class skiplist
        {
            typedef skiplist<_Kty, _Pr, _Alloc> _Myt;

            typedef typename _Skiplist_const_iterator<_Myt> const_iterator;
            typedef typename _Skiplist_iterator<_Myt> iterator;

            typedef typename _Alloc::size_type size_type;

            typedef std::pair<iterator, iterator> _Pairii;
            typedef std::pair<iterator, bool> _Pairib;

            skiplist();
            skiplist(const _Alloc& _Al);
            skiplist(const _Pr& _Pred);
            skiplist(const _Pr& _Pred, const _Alloc& _Al);
            ~skiplist();

            iterator begin();
            const_iterator begin() const;
            iterator end();
            const_iterator end() const;

            size_type size() const;
            size_type max_size() const;
            bool empty() const;

        //  _Pairib insert(_Kty& _val);
        //  _Pairib  insert(const _Kty& _val);
            size_type erase(const _Kty& x);
            void clear();

            _Pr key_comp() const;
            _Pr value_comp() const;

            iterator find(const _Kty& x);
            size_type count(const _Kty& x) const;
            iterator lower_bound(const _Kty& x) const;
            iterator upper_bound(const _Kty& x) const;
    //      _Pairii equal_range(const _Kty& x) const;

            _Alloc get_allocator() const;
        };

我一直在跟踪错误:

  

错误1错误C2143:语法错误:缺少';'在'&lt;'

之前      

错误3错误C2238:';'

之前的意外标记      

错误5错误C2238:';'

之前的意外标记      

错误2错误C4430:缺少类型说明符 - 假定为int。注意:C ++   不支持default-int

所有这些错误都是指头文件中的以下两行:

        typedef std::pair<iterator, iterator> _Pairii;
        typedef std::pair<iterator, bool> _Pairib;

我已经没有想法为什么会发生错误。

1 个答案:

答案 0 :(得分:1)

造成这种情况的错误是您在非依赖类型名称上使用typename

typedef typename _Skiplist_const_iterator<_Myt> const_iterator;
typedef typename _Skiplist_iterator<_Myt> iterator;

删除typename并包含定义<memory>的标题std::pair就可以了。

另请注意,您的标识符无效(标识符以下划线开头,后跟另一个下划线或大写字母保留),并且您 允许使用可读标识符。 ;-)标准库实现使用保留标识符来避免与客户端代码冲突。但你不应该这样做。