differs in levels of indirection from 'int ()' (C)

c

Solution

You are calling CancelarPedido before you declared it. You need to reorder the code or add a forward declaration for CancelarPedido.

Without a declaration of CancelarPedido in scope, it defaults to int CancelarPedido(). You get the error message because lista is declared to be a pointer but CancelarPedido is declared to return an int.

Problem

This code is giving me this error, which I don't understand. I can't even run the program. Can you help me to fix this error, please? If you don't understand anything in the code, say it. `error C2040: 'CancelarPedido' : 'ppedido (ppedido)'` differs in levels of indirection from 'int ()' ``` printf("\nIntroduza opcao:"); scanf("%d",&opc); switch(opc){ case 1: lista = NovoPedido(lista);break; case 2: lista = CancelarPedido(lista);break; case 3: printf("Falta implementar a funcao.");break; case 4: printf("Falta implementar a funcao.");break; } }while(opc!=5); return lista; } ppedido CancelarPedido(ppedido lista) { ppedido actual, anterior = NULL; char id[5]; actual = lista; if(lista == NULL) printf("\nNao ha pedidos na fila de espera..."); else { printf("\nIntroduza o ID do pedido que pretende cancelar: "); scanf("%s", id); while(actual != NULL && ((strcmp(actual->id, id)) != 0)){ anterior = actual; actual = actual->prox; } if(actual == NULL){ printf("\nERRO - Nao existe nenhum pedido com o ID introduzido."); return lista; } if(anterior == NULL){ lista = actual->prox; printf("\nPedido cancelado com sucesso..."); } else{ anterior->prox = actual->prox; printf("\nPedido cancelado com sucesso..."); } free(actual); return lista; } } ```

Original source