C++ 使用std::pair类时头文件中typedef出错

C++ 使用std::pair类时头文件中typedef出错,c++,std,header-files,std-pair,C++,Std,Header Files,Std Pair,我正在以一种类似STD的方式编写SkipList实现:使用分配器、迭代器等。整个类已经完成并且正在工作,但现在我正在尝试为我创建的类编写一个头文件。我当前的头文件内容是: template<class _MySkiplist> class _Skiplist_const_iterator; template<class _MySkiplist> class _Skiplist_iterator; template<class _Kty,

我正在以一种类似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;
        };
模板
类_Skiplist _const _迭代器;
模板
类_Skiplist_迭代器;
模板
职业技工
{
typedef skiplist_Myt;
typedef typename_Skiplist_const_迭代器const_迭代器;
typedef typename_Skiplist_迭代器迭代器;
typedef typename\u Alloc::size\u type size\u type;
typedef std::Pairii对;
typedef std::成对_Pairib;
斯基普利斯特();
skiplist(const_Alloc&Al);
skiplist(const\u Pr&Pred);
skiplist(常量Pr和常量Pred,常量Alloc和常量Al);
~skiplist();
迭代器begin();
常量迭代器begin()常量;
迭代器end();
常量迭代器end()常量;
大小\类型大小()常量;
大小类型最大大小()常量;
bool empty()常量;
//_Pairib插件(_Kty和_val);
//_Pairib插件(常数和值);
大小类型擦除(常数和x);
无效清除();
_Pr key_comp()常量;
_Pr值_comp()常量;
迭代器查找(const _Kty&x);
尺寸类型计数(常数和x)常数;
迭代器下界(const _Kty&x)const;
迭代器上界(const _Kty&x)const;
//相等范围(常数和x)常数;
_Alloc get_分配器()常量;
};
我不断收到以下错误:


错误1错误C2143:语法错误:缺少“;”在“之前,导致此错误的原因是您正在对非依赖类型名称使用
typename

typedef typename _Skiplist_const_iterator<_Myt> const_iterator;
typedef typename _Skiplist_iterator<_Myt> iterator;
typedef typename\u Skiplist\u const\u迭代器const\u迭代器;
typedef typename_Skiplist_迭代器迭代器;
删除
typename
并包括定义了
std::pair
的标题


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

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

typedef typename _Skiplist_const_iterator<_Myt> const_iterator;
typedef typename _Skiplist_iterator<_Myt> iterator;
typedef typename\u Skiplist\u const\u迭代器const\u迭代器;
typedef typename_Skiplist_迭代器迭代器;
删除
typename
并包括定义了
std::pair
的标题


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

你的标识符在C++代码中是非法的:下划线后面是大写字母。也许编译器在迭代器<代码> TyPulf< <代码>中混淆了<代码>类型名称<代码>。change@Marcin下划线+小写字母实际上并没有好多少因为这些是在全局命名空间中保留的。只是在名字的开始时不要使用下划线——无论如何它都没有意义。你是否包括了<代码> <代码>标题?你的标识符在C++代码中是非法的:下划线后面是大写字母。也许编译器在迭代器<代码> TyPulf< <代码>中混淆了<代码>类型名称<代码>。下划线+小写字母和否change@Marcin下划线+小写字母实际上并没有太好,因为它们保留在全局名称空间中。只是根本不要在名称的开头使用下划线——这没有任何意义。您是否包含
标题?删除
typename
Hmm后没有任何更改。在这种情况下,如果您能告诉我们错误发生在何处,会有所帮助。它为我编译。如前所述:所有错误消息都是指这两行的
\u pairib
\u pairii
类型definitions@Marcin您是否
#包括
?是的,包括
有帮助。谢谢删除
typename
Hmm后没有任何更改。在这种情况下,如果您能告诉我们错误发生的位置,将会有所帮助。它为我编译。如前所述:所有错误消息都是指这两行的
\u pairib
\u pairii
类型definitions@Marcin您是否
#包括
?是的,包括
有帮助。谢谢