C2676二进制'++':SetIterator <telement>未定义此运算符

时间:2016-05-20 15:01:29

标签: c++ operator-overloading

我正在尝试在我的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++;
    };

1 个答案:

答案 0 :(得分:3)

您定义的运算符是prefix operator,因此您应该像这样调用它:

++it;

如果您需要后缀,请按如下方式声明:

SetIterator<TElement> operator ++ (int);