使用递归创建二叉搜索树的遍历。
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 只是一个函数,打印对象中的数据是什么。每个对象都有三个值,数据、左和右。我如何使用该函数实际访问这些项目?
最佳答案
看起来对 inOrderPtr(this->data)
的调用只是将树节点的 data
成员传递给 print_vals
功能。如果您想访问 left
和 right
元素,请使用 inOrderPtr(*this)
。您必须更改各种声明才能编译,例如 inOrderPtr
和 print_vals
的声明。如果没有看到您的其余代码,很难说出您需要将它们更改为什么。
另一方面,在我看来,您可能希望更像这样编写递归调用:
this->left->inOrder(inOrderPtr);
不过,我正在对您的实现做出假设。
关于c++ - 需要通过函数指针访问类对象 - 二叉搜索树类创建相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/206498/