【发布时间】:2015-12-04 02:06:08
【问题描述】:
对于家庭作业,我必须实现一个二叉树(不使用 STL 二叉树)容器。除了一个之外,我所有的树函数都在工作。
链接到我的代码: https://github.com/matthamil/BinaryTree
在 bt_class.h 中,我有带有模板实现的 binary_tree 模板类。
在 bintree.h 中,我有带有模板实现的 binary_tree_node 类。
在 main.cpp 中,我进行了一系列测试以确保功能正常工作。
我的问题在这里:
template <class Item>
Item binary_tree<Item>::retrieve( ) const
{
return current_ptr->data();
}
我需要这个函数的返回类型是存储在 binary_tree_node 中的任何数据类型。我不确定如何做到这一点。
对于当前的实现,它返回一个指向当前节点的指针。
我应该会写
cout << test->retrieve();
在 main.cpp 中,输出将是当前节点的数据。但是,由于它返回一个指针,我必须添加一个额外的步骤:
*first = test->retrieve();
cout << first->data() << endl;
//"first"
谁能提供帮助?
【问题讨论】:
-
没有人会在链接上查看您的代码。请发帖MCVE。
-
如果你的树有当前节点,那么你犯了一个主要的设计错误。
-
您将
Item(binary_tree的模板参数)设置为节点类型,而不是值类型。这是一个不寻常的选择,也许应该修复。如果你不解决这个问题,你对检索的定义可以使用 C++11 特性auto来推断值类型,或者更复杂的模板编码可以使值类型显式。 -
在你的树类和节点类中使用
Item具有Item的两种不同含义是令人困惑的。我没有尝试构建您的代码,但我不希望它编译,因为该检索函数似乎在该类型的节点意义上返回Item,但在树中声明为返回Item感觉。
标签: c++ templates tree binary-tree