C++ 递归中无效的void操作数

C++ 递归中无效的void操作数,c++,recursion,void,C++,Recursion,Void,我试着用递归法把这个数字分成12,3,比如123。所以我有一个问题,因为我使用了void,现在编译器显示: “void”和“int”类型的操作数对二进制“operator!=”无效 在递归所在的最后一行中。 我假设一开始是关于a和b的比较,但是a和b是int类型,所以我不明白为什么不能将它们与0进行比较 void podzial ( int N, int a, int b, int & k ) { if(N==0 and a!=0 and b!=0) if(prime(a,b))

我试着用递归法把这个数字分成12,3,比如123。所以我有一个问题,因为我使用了
void
,现在编译器显示:

“void”和“int”类型的操作数对二进制“operator!=”无效

在递归所在的最后一行中。 我假设一开始是关于
a
b
的比较,但是
a
b
int
类型,所以我不明白为什么不能将它们与
0
进行比较

void podzial ( int N, int a, int b, int & k )
{
if(N==0 and a!=0 and b!=0)
    if(prime(a,b))
    {
        cout<<a<<b<<endl;
        k++;
    }
else if(N==0) return;
else
{
    a*=10; b*=10;
    podzial(N/10,a+(N%10),b,k) or podzial(N/10,a,b+(N%10),k);
}
}
void podzial(int N,int a,int b,int&k)
{
如果(N=0,a!=0,b!=0)
if(素数(a,b))
{

cout
podzial
有一个
void
返回值,因此不能用作
(即
|
)条件检查中的参数

您不希望函数返回一个
int


还要记住,
是短路的,因此如果左侧的计算结果为
true
podzial
有一个
void
返回值,则不会对右侧进行计算,因此不能在
(即
|
)条件检查中用作参数

void podzial (int N, int a, int b, int& k) {
    ...
    else if(N == 0) {
        return;   // Should't have a return here since podzial's return type is void.
                  // 
                  // You can just do what I do in the code example below.
    }
    ...
您不希望函数返回一个
int

还要记住,
短路,因此,如果左侧的计算结果为
,则不会对右侧进行计算

void podzial (int N, int a, int b, int& k) {
    ...
    else if(N == 0) {
        return;   // Should't have a return here since podzial's return type is void.
                  // 
                  // You can just do what I do in the code example below.
    }
    ...
您可能需要重新组织if语句

void podzial (int N, int a, int b, int& k) {
    if(N == 0) {
        if(a != 0 && b != 0) {
            if(prime(a, b)) {
                cout << a << b << endl;
                k++;
            }
        }
        cout << "Recursion terminated";
    }
    else {
        a *= 10; 
        b *= 10;
        podzial( N / 10, a + (N % 10), b, k)
        // or podzial(N / 10, a, b + (N % 10), k);
        // If you actually wanted to write...
        // return podzial(...) || podzial(....)
        // Then you'll need to add a return type to the function header
        // and can keep the 'else if(N==0) return 0;'
    }
}
void podzial(int N,int a,int b,int&k){
如果(N==0){
如果(a!=0&&b!=0){
if(素数(a,b)){
库特
您可能需要重新组织if语句

void podzial (int N, int a, int b, int& k) {
    if(N == 0) {
        if(a != 0 && b != 0) {
            if(prime(a, b)) {
                cout << a << b << endl;
                k++;
            }
        }
        cout << "Recursion terminated";
    }
    else {
        a *= 10; 
        b *= 10;
        podzial( N / 10, a + (N % 10), b, k)
        // or podzial(N / 10, a, b + (N % 10), k);
        // If you actually wanted to write...
        // return podzial(...) || podzial(....)
        // Then you'll need to add a return type to the function header
        // and can keep the 'else if(N==0) return 0;'
    }
}
void podzial(int N,int a,int b,int&k){
如果(N==0){
如果(a!=0&&b!=0){
if(素数(a,b)){

您是否可以添加额外的
{}
,以明确如果
s与
else
s匹配,则哪些
。目前很难确定您想要哪些分支请解释您想要最后一行做什么(最长的一行)是的,谢谢Caleth,因为正如我现在看到的,实际上这个
else
出错了
if
。我想添加N的最后一位(我拆分的数字)到a或b,但我意识到我做了两个相同的分割,所以一个
podzial
就足够了,但在第一次运行中,我必须选择哪一个将包含最后一位的值。您可能需要添加额外的
{}
为了弄清楚哪个
if
s和哪个
else
s一起。目前很难说你想要哪个分支请解释你想要最后一行做什么(最长的一行)是的,谢谢Caleth,因为我现在看到的这个
else
发生了错误
if
。我想加上N的最后一位(我拆分的数字)但我意识到我做了两个完全相同的分割,所以一个
podzial
就足够了,但在第一次运行中,我必须选择哪一个将有最后一个数字,如果你想在条件表达式中使用它,它应该返回''bool'@RobertAndrzejuk',或者隐式转换为bool。如果返回的结果是整数值,那么我nteger类型应该被返回。但是如果结果是“true”或“false”,那么只应该使用bool。根据设计,结果类型不应该基于隐式转换。谢谢!现在,我当然知道我不能在这里执行
。是的,最后返回k值是有必要的,但我不知道应该在哪里初始化ze
int k=0
因为它是递归的,所以我决定生成
int&k
并生成另一个返回kIf的函数,如果你想在条件表达式中使用它,它应该返回''bool''@RobertAndrzejuk或隐式转换为bool。如果返回的结果是一个整数值,那么应该返回整数类型。但是如果结果是“真”或“假”,则只应使用bool。根据设计,结果类型不应基于隐式转换。谢谢!现在,我当然看到我不能在这里执行
。是的,最后它不应该返回k值,但我不知道应该在哪里初始化
int k=0
,因为它是递归的所以我决定做
int&k
并做另一个返回k的函数