Как решить эту ошибку косвенной рекурсии?

#include <iostream>
#include <stdio.h>
using namespace std;

void funB(int n){
    if (n>1){
    cout<<n<<" ";
    funA(n/2);
}
}
void funA(int m)
{
    if (m>0){
        cout<<m<<" ";
        funB(m-1);
        }
}

int main()
{
    funA(20);
    return 0;
}

Для этого кода я получаю следующую ошибку:

prog.cpp: In function ‘void funB(int)’:
prog.cpp:8:13: error: ‘funA’ was not declared in this scope
     funA(n/2);
             ^

Для этого простого примера косвенной рекурсии, какова возможная ошибка? Я даже пытался изменить порядок функций.


person Yash Ingle    schedule 29.03.2021    source источник


Ответы (1)


Попробуй это. Что я сделал, так это то, что я только что объявил funA перед определением обеих функций, чтобы компилятор знал, что существует функция funA, на которую ссылаются. Это называется предварительным объявлением.

#include <iostream>
#include <stdio.h>
using namespace std;
void funA(int);
void funB(int n){
    if (n>1){
    cout<<n<<" ";
    funA(n/2);
}
}
void funA(int m)
{
    if (m>0){
        cout<<m<<" ";
        funB(m-1);
        }
}

int main()
{
    funA(20);
    return 0;
}
person Suyash Krishna    schedule 29.03.2021