2008-10-15 9 views
1

Создание траверс для дерева двоичного поиска с рекурсией.нужен доступ к объекту класса с помощью указателя функции - создание двоичного типа дерева поиска Связано

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); 

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

+0

Использование шаблона «образец кода» вместе с некоторыми символами новой строки и отступом сделает этот пример кода намного легче для чтения. – 2008-10-15 21:11:13

ответ

3

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

На другой ноте, мне кажется, что вы можете написать рекурсивные вызовы больше, как это:

this->left->inOrder(inOrderPtr); 

Я делаю предположение о вашей реализации, однако.

+0

http://rafb.net/p/aBmQZx94.html это на самом деле программа драйвера. Я не могу ничего изменить, поэтому мне нужно следовать руководству. – Doug 2008-10-15 21:19:44

 Смежные вопросы

  • Нет связанных вопросов^_^