为什么输出一个void函数的返回值失败?


#include<iostream>
#include<string>
using namespace std;
void subseq(string s, string ans)
{
if (s.size() == 0)
{
cout <<ans<< endl;
}
char ch = s[0];
int code = ch;
string ros = s.substr(1);
subseq(ros, ans);
subseq(ros, ans+ch);
subseq(ros, ans + std::to_string(code));

}
int main()
{
cout<<subseq("AB", " ");
return 0;
}

错误,如IDE中所述,是:所有通过此函数的路径将调用自己二进制表达式的无效操作数('std::__1::ostream'(也称为'basic_ostream')和'void')

两个问题

  • 无穷递归,"所有通过此函数的路径将调用自己";这里是提示
  • 尝试输出void

可以通过使用合适的returns和subseq的有意义的返回类型来处理。

对于这个问题,你要思考如何摆脱这个坏的递归。在函数的哪一点你不希望其余的被执行?
在什么时候你知道你想要输出的结果。它有什么数据类型,你需要将该类型声明为返回值。

最新更新