我正在用c ++编写一个二叉树(使用链接节点表示)。 我想编写一个成员函数来计算树中节点的数量,所以我写了一个递归函数来完成这项工作:
template<class Item> size_t binary_tree<Item>::count_node(
binary_tree_node<Item>* const node)
{
if(node == NULL) return 0;
else return 1 + count_node(node->get_left())
+ count_node(node->get_right());
}
我在binary_tree类的private中设置了这个函数。我有一个公共函数size()来调用它:
template<class Item> size_t binary_tree<Item>::size()
{
return count_node(root);
}
现在我的问题出现了:如果我像编写代码一样编写size(),它可以正常工作。但是如果我像这样将返回值设置为const:
template<class Item> size_t binary_tree<Item>::size() const
{
return count_node(root);
}
此代码无法编译。编译器抱怨无法将size_t传递给const size_t。如何解决这个问题?感谢。
答案 0 :(得分:4)
在const
方法内部调用的任何方法都需要const
。因此,在您的情况下,count_node
类也需要标记为const
。
更正式地说,当你进入标记为const
的函数时,this
指针变为const T*
,因此你不能调用任何不使用它的方法也接受const T*
,因为那时您必须将const T*
投射到T*
,这是不允许的。如果你真的想做一些非常量的事情,你可以使用const_cast
删除常量(不推荐),或者使用volatile成员/方法。