首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:控制到达非空函数的末尾[-Werror=return-type] }^

错误:控制到达非空函数的末尾[-Werror=return-type] }^
EN

Stack Overflow用户
提问于 2019-07-26 21:57:40
回答 2查看 844关注 0票数 1

这个问题基本上是要从给定的'n‘数字生成一个算术表达式,并且该表达式应该可以被101整除。我们只能有+,-,*运算符,表达式是左关联的。

我已经尝试了所有可用的解决方案,堆栈溢出中已经提到了这些解决方案,比如用else关闭表达式等等

代码语言:javascript
复制
bool calci(int a[],int n,int sum,int pos,char operato[],deque<int>&q,deque<char>&qc)
{

    if(sum%101==0)
    {   //cout<<"sum:"<<sum<<endl;
        return true;
    }

    else if(pos==n)
        {return false;}
    else
    {
    for(int k=0;k<3;k++)
    {  // cout<<"here for "<<a[pos]<<endl;
        sum=addto(sum,a[pos],operato[k]);
        qc.push_back(operato[k]);
        q.push_back(a[pos]);
        bool kyaagesemila=calci(a,n,sum,pos+1,operato,q,qc);
        if(kyaagesemila)
            {
                return true;
            }
        sum=removefrom(sum,a[pos],operato[k]);
        qc.pop_back();
        q.pop_back();
    }
    }
}

我收到一个编译错误

代码语言:javascript
复制
solution.cc:53:1: error: control reaches end of non-void function [-Werror=return-type]
 }
 ^
cc1plus: some warnings being treated as errors```
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-26 21:59:23

错误消息非常清楚。该函数的返回类型为bool,但在某些执行路径中不返回任何内容。

在最后的else语句中,哪里有带有布尔表达式的return语句?

或者,您需要重写最后一条else语句,使其在循环外返回一个布尔表达式。

例如,在循环之后,您可以添加语句

代码语言:javascript
复制
return false;

附注:使用英文单词作为变量标识符。

票数 3
EN

Stack Overflow用户

发布于 2019-07-26 22:44:01

这就是它所说的:您的代码并不总是返回(或者,如果它返回了,这是由于编译器没有能力或不希望执行的逻辑)。

如果控制进入else中的循环,并且没有迭代具有kyaagesemila == true,那么它将永远不会到达return语句。

根据需要的逻辑,将return false;return true;放在else的末尾。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57221579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档