нужен доступ к объекту класса через указатель на функцию - создание класса дерева двоичного поиска - PullRequest
1 голос
/ 16 октября 2008

Создание обходов для дерева двоичного поиска с рекурсией.

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

Вот функция. Теперь это явно неправильно. Эта функция называется так:

first.inOrder(print_vals);

первый - это объект, а print vals - это просто функция, которая печатает данные в объекте Есть три значения для каждого объекта, данных, слева и справа. Как мне получить доступ к этим элементам с помощью функции?

1 Ответ

3 голосов
/ 16 октября 2008

Похоже, что вызов inOrderPtr(this->data) передает только элемент data узла дерева в функцию print_vals. Если вы хотите получить доступ к элементам left и right, используйте inOrderPtr(*this). Вам придется изменить различные объявления для того, чтобы это компилировалось, например объявления для inOrderPtr и print_vals. Не видя остальной части вашего кода, трудно сказать, на что вам нужно изменить их.

С другой стороны, мне кажется, что вы, возможно, захотите написать рекурсивные вызовы, например, так:

this->left->inOrder(inOrderPtr);

Хотя я делаю предположения о вашей реализации.

...