Search code examples
ccompiler-errorsscopedeclarationdev-c++

Error 'listaCliente' undeclared (first use in this function)


I can't run the code because it gives the error mentioned in the title, but I declared it in main. I'm stuck for a few hours and I can't solve this

main.c , here is where I declare the "listaCliente"

int main()
{
    Cliente* listaCliente = lerBaseDeDados();

    menuPrincipal(listaCliente);
}

Cliente.c // menu , basically this is going to be a menu to manage clients (add remove consult), but I don't understand why it's giving me an error in the line menuPrincipal(listaCliente);

void submenuGGestaoClientes() 
{
    int continuar=-1;
    int aux=-1;
    do {
        printf("---------------- Gestao Clientes ----------------\n\n");
        printf("1- Adicionar Cliente\n");
        printf("2- Remover Cliente \n");
        printf("3- Consultar Clientes \n");
        printf("0- Retroceder \n\n");
        printf("-------------------------------------------------\n");

        do
        {
            fflush(stdin);
            if(scanf("%d", &aux) != 0){
                continuar = aux;
            }
            if(continuar < 0 || continuar > 3) {
                system("cls || clear");
                printf("erro, opcao invalida!\n");
                
                printf("---------------- Gestao Clientes ----------------\n\n");
                printf("1- Adicionar Cliente\n");
                printf("2- Remover Cliente \n");
                printf("3- Consultar Clientes \n");
                printf("0- Retroceder \n\n");
                printf("-------------------------------------------------\n");
            }
        } while(continuar < 0 || continuar > 3 );

        switch(continuar)
        {
            case 1:
                adicionar(listaCliente);
                break;

            case 2:
                printf("Arroz");
                break;
            
            case 3:
                printf("Arroz");
                break;
                
            case 0:
                menuPrincipal(listaCliente); //where have the 1º error
                break;

            default:
                printf("Digite uma opcao valida\n");
                break;
            
        }

        printf("\n");
        system("pause");
        
    } while(continuar != 0);
}

Cliente.c function "adicionar" basically it's a function that will add the customer data

void adicionar(Cliente* listaCliente) {
    Cliente* novoCliente = (Cliente*)calloc(1, sizeof(Cliente));
    int auxInt = -1;
    char auxNome, auxMorada;
    int escolha = -1;

    //Menu para escolher o tipo do contentor, a resposta e recolhida com um switch case 
    printf("Digite o nome do Cliente: \n");
    scanf("%c", &auxNome);
    novoCliente->nome = auxNome;
    
    printf("Digite o numero de cartao do cliente:\n");
    do {
        auxInt = -1;
        fflush(stdin);
        if(scanf("%d", &auxInt) != 0){
            novoCliente->num_cartao = auxInt;
        }
        if(auxInt < 0 ) {
            printf("erro, Numero de cartao invalido!\n");
        }
    } while(auxInt < 0 );
    
    printf("Digite o numero de cliente:\n");
    do {
        auxInt = -1;
        fflush(stdin);
        if(scanf("%d", &auxInt) != 0){
            novoCliente->num_cliente = auxInt;
        }
        if(auxInt < 0 ) {
            printf("erro, Numero de cliente invalido!\n");
        }
    } while(auxInt < 0 );
    
    printf("Digite o numero de contribuinte do cliente:\n");
    do {
        auxInt = -1;
        fflush(stdin);
        if(scanf("%d", &auxInt) != 0){
            novoCliente->num_cartao = auxInt;
        }
        if(auxInt < 0 || auxInt > 9999999) {
            printf("erro, Numero de Contribuinte invalido!\n");
        }
    } while(auxInt < 0 );
    
    printf("Digite a morada do Cliente: \n");
    scanf("%c", &auxMorada);
    novoCliente->morada = auxMorada;
    
    listaCliente = adicionarCliente(listaCliente, novoCliente);

    printf("\nAdicionado com sucesso!\n");
}

Solution

  • At least within the function submenuGGestaoClientes declared like

    void submenuGGestaoClientes();
    

    there is used the undeclared name listaCliente:

    adicionar(listaCliente);
    

    or

    menuPrincipal(listaCliente);
    

    Maybe you mean the following function declaration

    void submenuGGestaoClientes( Cliente* listaCliente );
    

    Pay attention to that such a call

    fflush(stdin);
    

    has undefined behavior. Remove such statements.

    Also rewrite this call of scanf

    scanf("%c", &auxNome);
    

    like

    scanf(" %c", &auxNome);
          ^^^^
    

    The leading space in the format string allows to skip white space characters in the input buffer.