我写了一个类,我想为它实现一个迭代器(如下面的代码所示)。我需要重载各种运营商和我面临下面提到的错误:编译它给了我下面的错误模板运算符重载错误
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*>&)’
任何想法可能会导致这样?
它可能不相关的问题,但你不应该使用[保留名称(http://stackoverflow.com/questions/228783)如'_Iterator'和'__lhs'。 – 2012-07-30 15:27:32
编译器无法推导出类型。如果(运算符<(temp,temp2))会很好地编译。 –
ForEveR
2012-07-30 15:31:15
可能是相关的:http://stackoverflow.com/questions/8308213/workaround-for-non-deduced-context – user396672 2012-07-30 15:39:26