下面的代码显示了一个简单的插入到二进制搜索树(手写的NOT STL)中的过程,我在bst中使用了函数指针,并且希望从main外部遍历该树。我如何使它在main之外工作?
在tree.inorder()上出现错误,提示没有重载函数实例
处理程序类
#include <iostream>
using namespace std;
void printTree(int & a)
{
cout << a << endl;
}
handler::handler()
{
}
void handler::printTree()
{
BinarySearchTree<int> tree;
tree.insert(10);
tree.insert(5);
tree.insert(2);
tree.insert(20);
tree.inorder(printTree);
}
主班
#include <iostream>
#include "BinarySearchTree.h"
#include "handler.h"
int main()
{
handler handle;
handle.printTree();
}
template<class T>
inline void BinarySearchTree<T>::inorder(Node * root, void(*inorderPtr)(T &)) const
{
if (root != nullptr)
{
if (root->left != nullptr)
{
inorder(root->left, inorderPtr);
}
inorderPtr(root->data);
if (root->right != nullptr)
{
inorder(root->right, inorderPtr);
}
}
else
{
cout << "No data" << endl;
}
}
template<class T>
inline void BinarySearchTree<T>::inorder(void(*inorderPtr)(T &)) const
{
inorder(this->root, inorderPtr);
}
答案 0 :(得分:2)
BinarySearchTree<T>::inorder
被声明为const
,因此root->data
为const
,并且由于inorderPtr(root->data);
(又名inorderPtr
)而无法调用printTree(int&)
需要一个非常量int&
。
通过修复const-correctness来修复它。您可以有两个BinarySearchTree<T>::inorder
。一个const
带一个void(*inorderPtr)(const T &)
,另一个非常量带一个void(*inorderPtr)(T &)
。