试图重载operator ++,无法在没有对象的情况下调用成员函数

时间:2016-04-15 14:24:22

标签: c++ iterator overloading operator-keyword

很抱歉,如果格式有点偏,我就是新来的。我也试过寻找解决方案,但我找不到一个有效的方法。

我正在尝试为二叉搜索树类创建一个迭代器。非常粗略,我的代码看起来像

template<class Key, class Value>
class BST {
  protected:
    //stuff
  public:
    //stuff
    class iterator {
      public:
        //member functions
        iterator& operator++() {
          //gets next node
        }
    }
}

所以在我的main函数中,我用

创建一个迭代器
BST<string, int>::iterator it = bst.begin()

它有效。我可以使用迭代器访问节点。但是当我尝试

时,在下一行
it++;

我收到编译错误,说我“无法调用成员函数...没有对象”。我不明白为什么不呢?如果我在'it'上调用operator ++,那么它不应该仅仅运行'it'吗?

1 个答案:

答案 0 :(得分:4)

Postfix增量运算符重载需要在其签名中使用伪int个参数 - 从前缀incerement中删除它。像这样:

   iterator operator++(int ) {
      //gets next node
    }

您通常也会从后缀增量中返回一个值,而不是引用,因为您需要返回预先递增的对象。