-1

クラスを作成し、そのイテレータを実装したいと考えました (次のコードに示すように)。さまざまな演算子をオーバーロードする必要があり、以下のエラーに直面しました。

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*>&)’

何がこれを引き起こす可能性がありますか?

4

1 に答える 1