这个问题基本上是要从给定的'n‘数字生成一个算术表达式,并且该表达式应该可以被101整除。我们只能有+,-,*运算符,表达式是左关联的。
我已经尝试了所有可用的解决方案,堆栈溢出中已经提到了这些解决方案,比如用else关闭表达式等等
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();
}
}
}我收到一个编译错误
solution.cc:53:1: error: control reaches end of non-void function [-Werror=return-type]
}
^
cc1plus: some warnings being treated as errors```发布于 2019-07-26 21:59:23
错误消息非常清楚。该函数的返回类型为bool,但在某些执行路径中不返回任何内容。
在最后的else语句中,哪里有带有布尔表达式的return语句?
或者,您需要重写最后一条else语句,使其在循环外返回一个布尔表达式。
例如,在循环之后,您可以添加语句
return false;附注:使用英文单词作为变量标识符。
发布于 2019-07-26 22:44:01
这就是它所说的:您的代码并不总是返回(或者,如果它返回了,这是由于编译器没有能力或不希望执行的逻辑)。
如果控制进入else中的循环,并且没有迭代具有kyaagesemila == true,那么它将永远不会到达return语句。
根据需要的逻辑,将return false;或return true;放在else的末尾。
https://stackoverflow.com/questions/57221579
复制相似问题