【发布时间】:2012-07-30 15:11:46
【问题描述】:
我写了一个类,我想为它实现一个迭代器(如下代码所示)。我需要重载各种运算符,我遇到了下面提到的错误:
class BaseClass
{
virtual ~BaseClass() {}
};
template<class T>
class AbstractBaseOrgan: public BaseClass
{
public:
typedef T value;
template<class TT>
class AbstractBaseIterator:
public std::iterator<std::random_access_iterator_tag,
typename std::iterator_traits<TT>::value_type>
{
protected:
TT _M_current;
const TT&
base() const
{ return this->_M_current; }
};
protected:
value te;
};
template<typename Iter>
inline bool
operator<(const typename AbstractBaseOrgan<typename
std::iterator_traits<Iter>::value_type>::template
AbstractBaseIterator<Iter>& lhs,
const typename AbstractBaseOrgan<typename
std::iterator_traits<Iter>::value_type>::template
AbstractBaseIterator<Iter>& rhs)
{ return lhs.base() < rhs.base(); }
int main()
{
AbstractBaseOrgan<int>::AbstractBaseIterator<int*> temp;
AbstractBaseOrgan<int>::AbstractBaseIterator<int*> temp2;
int ttemp;
if(operator< (temp,temp2))
ttemp = 0;
return 0;
}
编译它给我以下错误:
error: no matching function for call to ‘operator<(AbstractBaseOrgan<int>::AbstractBaseIterator<int*>&, AbstractBaseOrgan<int>::AbstractBaseIterator<int*>&)’
知道是什么原因造成的吗?
【问题讨论】:
-
这可能与你的问题无关,但你不应该使用reserved names如
_Iterator和__lhs。 -
编译器无法推断类型。 if(operator (temp,temp2)) 可以正常编译。
-
是的,没错,但我不想使用这段代码。我想使用:temp
标签: c++ templates operator-overloading