我寫了一個類,我想爲它實現一個迭代器(如下面的代碼所示)。我需要重載各種運營商和我面臨下面提到的錯誤:編譯它給了我下面的錯誤模板運算符重載錯誤
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