doublench21
@doublench21

Как вызвать метод объемлющего класса?

class RBtree : public AbstractTree {
  Node *root;
  Node *NIL;

public:
  RBtree(MemoryManager &mem);
  ~RBtree(){};

  /**
   * Пользовательские функции
   */
public:
  Node *tree_successor(Node *n);
 
  
  class Iterator : public AbstractTree::Iterator {
    Node *begin;
    Node *end;
    Node *cur;
    /**
     * Виртуальные функции
     */
  public:
    bool hasNext();                 //

  };
};


Node *RBtree::tree_successor(Node *n) {
  if (n->right != this->NIL) {
    return this->tree_minimum(n->right);
  }
  Node *y = n->parrent;
  while (y != this->NIL && n == y->right) {
    n = y;
    y = y->parrent;
  }
  return y;
}

bool RBtree::Iterator::hasNext() {
    Node *n = cur;
   // Как мне тут вызвать функцию  tree_successor(n); ???
 // ...
}


Определение функции я менять не могу!
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как мне тут вызвать функцию tree_successor(n); ???

Эту функцию можно вызвать только для объекта класса RBtree. Вам нужно либо иметь указатель/ссылку на RBtree в классе итератора, либо уметь получать его из объекта Node.
Ответ написан
Комментировать
@aborysov
Iterator должен как минимум иметь ссылку(указатель) на экземпляр RBTree, чтобы вызвать метод.
Ответ написан
Комментировать
@mamkaololosha
Дайте я угадаю.
Вы хотите написать RBTree как в джаве, но за пример берете STL? Может лучше вынести class Iterator : public AbstractTree::Iterator, как отдельный шаблон с параметрами?
https://gist.github.com/aspyct/3129371
Вы пишите на С++, как на "С с классами".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы