Error: control may reach end of non-void function in C++
Error: control may reach end of non-void function in C++
我无法弄清楚为什么会发生此错误:错误:"control may reach end of non-void function" 即使 "else" 语句出现在最后。
代码如下:
bnode* binsert(bnode *h,int k){
bnode *temp=new bnode;
if(h==NULL)
{
temp->num=k;
temp->L=NULL;
temp->R=NULL;
h=temp;
return h;
}
else if(h->L==NULL && k<h->num)
{
temp->num=k;
temp->L=NULL;
temp->R=NULL;
h->L=temp;
return h;
}
else if(h->R==NULL && k>h->num)
{
temp->num=k;
temp->L=NULL;
temp->R=NULL;
h->R=temp;
return h;
}
else if(h->L!=NULL && k<h->num)
{
h->L=binsert(h->L,k);
}
else
{
h->R=binsert(h->R,k);
}
}
因为这最后两个条件:
else if(h->L!=NULL && k<h->num)
{
h->L=binsert(h->L,k);
}
else
{
h->R=binsert(h->R,k);
}
可能会发生并且没有给出 return...
您需要确保函数 return 是一个值,无论条件计算的是什么....
else if(h->L!=NULL && k<h->num)
{
h->L=binsert(h->L,k);
}
else
{
h->R=binsert(h->R,k);
}
在您的代码的 else if
和 else
情况下,如果您到达此处,您不会 return 一个值,如果您尝试使用此行为,则行为未定义值。
您可能想在两个分支中添加一个return h;
。
您需要return递归调用的结果,它不会自动完成。
您还可以通过添加构造函数来稍微简化代码:
bnode::bnode(int v)
: num(v),
L(nullptr),
R(nullptr)
{
}
并且由于您已经处理了空参数的情况,因此您不需要空子参数的特殊情况:
bnode* binsert(bnode *h,int k)
{
if(h == nullptr)
{
h = new bnode(k);
}
else if(k < h->num)
{
h->L = binsert(h->L, k);
}
else if(k > h->num)
{
h->R = binsert(h->R, k);
}
return h;
}
我无法弄清楚为什么会发生此错误:错误:"control may reach end of non-void function" 即使 "else" 语句出现在最后。
代码如下:
bnode* binsert(bnode *h,int k){
bnode *temp=new bnode;
if(h==NULL)
{
temp->num=k;
temp->L=NULL;
temp->R=NULL;
h=temp;
return h;
}
else if(h->L==NULL && k<h->num)
{
temp->num=k;
temp->L=NULL;
temp->R=NULL;
h->L=temp;
return h;
}
else if(h->R==NULL && k>h->num)
{
temp->num=k;
temp->L=NULL;
temp->R=NULL;
h->R=temp;
return h;
}
else if(h->L!=NULL && k<h->num)
{
h->L=binsert(h->L,k);
}
else
{
h->R=binsert(h->R,k);
}
}
因为这最后两个条件:
else if(h->L!=NULL && k<h->num)
{
h->L=binsert(h->L,k);
}
else
{
h->R=binsert(h->R,k);
}
可能会发生并且没有给出 return...
您需要确保函数 return 是一个值,无论条件计算的是什么....
else if(h->L!=NULL && k<h->num)
{
h->L=binsert(h->L,k);
}
else
{
h->R=binsert(h->R,k);
}
在您的代码的 else if
和 else
情况下,如果您到达此处,您不会 return 一个值,如果您尝试使用此行为,则行为未定义值。
您可能想在两个分支中添加一个return h;
。
您需要return递归调用的结果,它不会自动完成。
您还可以通过添加构造函数来稍微简化代码:
bnode::bnode(int v)
: num(v),
L(nullptr),
R(nullptr)
{
}
并且由于您已经处理了空参数的情况,因此您不需要空子参数的特殊情况:
bnode* binsert(bnode *h,int k)
{
if(h == nullptr)
{
h = new bnode(k);
}
else if(k < h->num)
{
h->L = binsert(h->L, k);
}
else if(k > h->num)
{
h->R = binsert(h->R, k);
}
return h;
}