很抱歉,如果格式有点偏,我就是新来的。我也试过寻找解决方案,但我找不到一个有效的方法。
我正在尝试为二叉搜索树类创建一个迭代器。非常粗略,我的代码看起来像
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'吗?
答案 0 :(得分:4)
Postfix增量运算符重载需要在其签名中使用伪int
个参数 - 从前缀incerement中删除它。像这样:
iterator operator++(int ) {
//gets next node
}
您通常也会从后缀增量中返回一个值,而不是引用,因为您需要返回预先递增的对象。