我正在尝试在我的Set迭代器上定义operator ++
以调用方法next()
,因此它会增加迭代器中的位置。
template<typename TElement>
class SetIterator {
private:
Set<TElement>& set;
int poz;
public:
SetIterator(Set<TElement>& set, int poz) : set{ set }, poz{ poz } {
while (set.elems[this->poz] == EMPTY || set.elems[this->poz] == DELETED)
this->poz++;
};
SetIterator(const SetIterator& other) = default;
~SetIterator() = default;
bool valid() {
return poz < set.capacity;
};
void next() {
poz++;
while (set.elems[poz] == EMPTY || set.elems[poz] == DELETED)
poz++;
};
SetIterator<TElement>& operator ++ () {
next();
return *this;
};
TElement& element() {
return set.elems[poz];
};
};
问题在于,当我使用它时,它无法识别我对operator ++的定义:
SetIterator<int> it = set.begin();// set.begin() returns an iterator with poz=0
while (it.valid()) {
std::cout << it.element() << std::endl;
it++;
};
答案 0 :(得分:3)
您定义的运算符是prefix operator,因此您应该像这样调用它:
++it;
如果您需要后缀,请按如下方式声明:
SetIterator<TElement> operator ++ (int);