difiere en los niveles de direccionamiento indirecto de ‘int ()’ (C)

Este código me está dando este error, que no entiendo. Ni siquiera puedo ejecutar el progtwig. ¿Me puede ayudar a solucionar este error, por favor? Si no entiendes nada en el código, dilo.

error C2040: 'CancelarPedido' : 'ppedido (ppedido)' difiere en los niveles de error C2040: 'CancelarPedido' : 'ppedido (ppedido)' desde ‘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; } } 

Usted está llamando a CancelarPedido antes de que lo haya declarado. Debe reordenar el código o agregar una statement de reenvío para CancelarPedido.

Sin una statement de CancelarPedido en su scope, por defecto es int CancelarPedido (). Aparece el mensaje de error porque se declara que la lista es un puntero, pero se declara CancelarPedido para devolver un int.