Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以将递归函数的返回值设置为常量吗? 我在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()); } 模板大小\u t二叉树::计数\u节点( 二叉树(节点*常量节点) { 如果(node==NULL)返回0; 否则返回1+count\u节点(节点->向左获取() +count_node(node->get_right()); }_C++_Recursion_Constants_Return Value - Fatal编程技术网

我可以将递归函数的返回值设置为常量吗? 我在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()); } 模板大小\u t二叉树::计数\u节点( 二叉树(节点*常量节点) { 如果(node==NULL)返回0; 否则返回1+count\u节点(节点->向左获取() +count_node(node->get_right()); }

我可以将递归函数的返回值设置为常量吗? 我在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()); } 模板大小\u t二叉树::计数\u节点( 二叉树(节点*常量节点) { 如果(node==NULL)返回0; 否则返回1+count\u节点(节点->向左获取() +count_node(node->get_right()); },c++,recursion,constants,return-value,C++,Recursion,Constants,Return Value,我在二叉树类的private中设置了这个函数。我有一个公共函数size()来调用它: template<class Item> size_t binary_tree<Item>::size() { return count_node(root); } 模板大小\u t二叉树::大小() { 返回计数节点(根); } 现在我的问题来了:如果我像上面的代码那样编写size(),它就可以正常工作。但如果我将返回值设置为const,如下所示: template<

我在二叉树类的private中设置了这个函数。我有一个公共函数size()来调用它:

template<class Item> size_t binary_tree<Item>::size()
{
    return count_node(root);
}
模板大小\u t二叉树::大小()
{
返回计数节点(根);
}
现在我的问题来了:如果我像上面的代码那样编写size(),它就可以正常工作。但如果我将返回值设置为const,如下所示:

template<class Item> size_t binary_tree<Item>::size() const
{
    return count_node(root);
}
模板大小\u t二叉树::size()常量
{
返回计数节点(根);
}

这段代码无法编译。编译器抱怨无法将大小\u t传输到常量大小\u t。如何解决这个问题?谢谢。

const
方法内部调用的任何方法都必须是
const
本身。因此,在您的例子中,
count\u节点
类也需要标记为
const


更正式地说,当你进入一个标记为
const
的函数时,
这个
指针变成了一个
const T*
,因此你不能使用它调用任何不接受
const T*
的方法,因为这样你就必须将
const T*
强制转换成
T*
,这是不允许的。如果您确实想做一些非常量的事情,可以使用
const\u cast
删除常量(不推荐),或者使用易失性成员/方法。

const
方法内部调用的任何方法都必须是
const
本身。因此,在您的例子中,
count\u节点
类也需要标记为
const


更正式地说,当你进入一个标记为
const
的函数时,
这个
指针变成了一个
const T*
,因此你不能使用它调用任何不接受
const T*
的方法,因为这样你就必须将
const T*
强制转换成
T*
,这是不允许的。如果你真的想做一些非常量的事情,你可以使用
const\u cast
删除常量(不推荐),或者使用volatile成员/方法。

@Tian很高兴这有帮助。另外,为了将来的参考,你不必提及某人,如果他们写了这篇文章,他们会一直得到通知。@Tian很高兴这有帮助。另外,作为今后的参考,你不必提及任何人,如果他们写了这篇文章,他们将始终得到通知。