C++ 使用std::pair类时头文件中typedef出错
我正在以一种类似STD的方式编写SkipList实现:使用分配器、迭代器等。整个类已经完成并且正在工作,但现在我正在尝试为我创建的类编写一个头文件。我当前的头文件内容是: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,
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您是否#包括或
?是的,包括
有帮助。谢谢