【发布时间】:2013-01-09 17:08:25
【问题描述】:
我正在以类似 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:语法错误:缺少 ';'在'之前
错误 3 错误 C2238: ';' 前面的意外标记
错误 5 错误 C2238:';' 前面的意外标记
错误 2 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
所有这些错误都是指头文件中的以下两行:
typedef std::pair<iterator, iterator> _Pairii;
typedef std::pair<iterator, bool> _Pairib;
我不知道为什么会出现错误。
【问题讨论】:
-
您的标识符在 C++ 代码中是非法的:保留下划线后跟大写字母。
-
可能编译器被迭代器
typedef中的typename弄糊涂了? -
全部改成下划线+小写字母,没有变化
-
@Marcin 下划线 + 小写字母实际上并没有好多少,因为它们被保留在全局命名空间中。只是不要在名称的开头使用下划线 - 无论如何都没有意义。
-
您是否包含了
<utility>标头?
标签: c++ std header-files std-pair