error: control reaches end of non-void function [-Werror=return-type] } ^

error: control reaches end of non-void function [-Werror=return-type] } ^

问题基本上是关于从给定的 '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```

错误信息已经很清楚了。该函数具有 return 类型 bool 但 return 在某些执行路径中没有任何内容。

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

或者您需要重写最后一个 else 语句,使其 return 成为循环外的布尔表达式。

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

return false;

P.S。使用英文单词作为变量标识符。

这正是它所说的:您的代码并不总是 return(或者,如果是,那是由于编译器没有能力或不希望解决的逻辑)。

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

根据您想要的逻辑,在 else 的末尾放置一个 return false;return true;