我刚刚发布了一个跳表容器库。然而Sun编译器却抱怨这个问题:
template <class T, class R>
bool operator==(const IndexedSkipList<T,R> &left, const IndexedSkipList<T,R> &right)
{
return ((left.size() == right.size()) &&
(std::equal(left.begin(), left.end(), right.begin())));
}
错误信息如下:
"include/CSIndexedSkipList.h", line 65: Error: Too few arguments for template std::reverse_iterator<CS::BidiIdxIterator<CS::IndexedSkipList<CS::T, CS::R>>>.
"include/CSIndexedSkipList.h", line 207: Where: While specializing "CS::IndexedSkipList<CS::T, CS::R>".
"include/CSIndexedSkipList.h", line 207: Where: Specialized in non-template code.
上述代码从207行开始。但是它似乎在抱怨reverse_iterator。我真的不能理解它。我没有直接访问Sun编译器,所以我想知道我是否做错了什么。
此外,我只在reverse_iterator中使用一个模板参数,但我注意到SGI文档说第二个参数T没有默认值。尽管我到处都看到他们都这样使用:
typedef std::reverse_iterator<iterator> reverse_iterator;
编译器抱怨的是第65行。我需要添加T作为参数吗?我无法找出问题所在。
顺便说一下,在我能找到的所有平台上,gcc都可以正常工作。Borland也可以正常工作。